第一次尝试时无法识别PHP cookie和会话值

第一次尝试时无法识别PHP cookie和会话值,php,session,cookies,Php,Session,Cookies,好的,这是我的第二次尝试,用一种新的、更加孤立和简洁的方式来演示这个问题。问题与登录系统有关,其中会话变量在第一次尝试时似乎没有保存。但下面是演示错误行为的精简代码: <?php session_start(); echo "POST superglobal: <pre>" . print_r($_POST, true) . "</pre><hr/>"; echo "SESSION superglobal: <pre>" . print_

好的,这是我的第二次尝试,用一种新的、更加孤立和简洁的方式来演示这个问题。问题与登录系统有关,其中会话变量在第一次尝试时似乎没有保存。但下面是演示错误行为的精简代码:

<?php

session_start();

echo "POST superglobal: <pre>" . print_r($_POST, true) . "</pre><hr/>";
echo "SESSION superglobal: <pre>" . print_r($_SESSION, true) . "</pre><hr/>";
echo "COOKIE superglobal: <pre>" . print_r($_COOKIE, true) . "</pre><hr/>";

$_SESSION['session_var'] = "SESSION VAR AVAILABLE";
setcookie("cookie_var", "COOKIE VAR AVAILABLE");

?>  
<html>
    <body>
        <form action="" name="frmPost" method="POST">
            <input type="submit" name="cmdSubmitPost" value="Submit" />
        </form>
    </body>
</html>
单击一次提交后:

POST superglobal:
Array
(
    [cmdSubmitPost] => Submit
)

SESSION superglobal:
Array
(
    [session_var] => SESSION VAR AVAILABLE
)

COOKIE superglobal:
Array
(
    [cookie_var] => COOKIE VAR AVAILABLE
    [PHPSESSID] => 2k6ldfl2icdtj1k7sq5dc9qmj3
    [VC-NoCache] => 1
    [_asomcnc] => 1
)

[Submit]
这正是我所期望和需要的。我还临时注册了两个独立的免费php托管站点来测试这一点,它们都产生了与上面相同的结果

然而,在我的主要托管环境Arvixe,结果是不同的。事情是这样的:

初始页面加载后:

POST superglobal:
Array
(
    [cmdSubmitPost] => Submit
)

SESSION superglobal:
Array
(
)

COOKIE superglobal:
Array
(
)

[Submit]
单击一次提交后:

POST superglobal:
Array
(
    [cmdSubmitPost] => Submit
)

SESSION superglobal:
Array
(
    [session_var] => SESSION VAR AVAILABLE
)

COOKIE superglobal:
Array
(
    [cookie_var] => COOKIE VAR AVAILABLE
    [PHPSESSID] => 2k6ldfl2icdtj1k7sq5dc9qmj3
    [VC-NoCache] => 1
    [_asomcnc] => 1
)

[Submit]
第二次单击
Submit
后:

我希望在localhost和其他临时免费php托管环境中创建的结果排除了相当简单的代码中的任何基本缺陷

好的,现在的问题是:在Arvixe托管环境中,为什么页面在第一次提交后不识别cookie和会话值?我很确定,真正的问题是为什么在第一次提交后cookie值没有被识别?(这是真正的问题,因为这回答了为什么会话值没有被识别……这是因为PHPSESSID cookie还没有被识别)

ini的值基本上是相同的,但是如果有特定的值可能有助于在这里发布,请告诉我哪些值

此外,我认为这个问题的答案将有效地解决其他三个问题:


(那里没有一个解决方案对我有效)

我在开发过程中遇到过几次这个问题,尽管我从未使用过
Arvixe
。我决不是一个专家,但这是我的研究和经验,也是为什么会出现编码错误的两个主要原因

未根据请求立即创建Cookie 刷新页面时,新创建的Cookie不会立即可用。我以前在使用
SESSION\u ID
和cookies时出现过这种意外行为。例如,如果您在一个请求中设置了cookie,那么它将在服务器的下一个请求之前不可用(因此在设置cookie后的下一次刷新)。

也可能有奇怪的逻辑和浏览器缓存网页的方式,我认为这可能就是这里发生的事情

PHP会话未设置-通过<代码>www或
非www
问题 您说过它发生在您的
Arvixe
环境中,而不是本地主机上?您应该在单击“提交”时检查域(删除或添加www)是否正在更改。如果在
htaccess
或通过
ini\u set
设置或PHP中的其他配置设置中没有正确的规则,则可能会得到两个会话ID。我不能很清楚地从你的代码中分辨出来,但如果是这样的话,它会解释为什么你只在第二次得到它(因为第一次提交它会加载新域并设置
会话
变量和
cookie
变量)。您的服务器可能会将
www
视为一个新的子域,而不是选择共享cookie和会话id,而是创建一个新的子域。尝试进入
控制台
并执行
document.cookie
,以获取有关它是否正在更改的信息

无关的
会话
命令或其他原因 如果页面上有任何PHP命令会干扰会话id,例如重新生成会话id或:



这些命令可能会影响会话并导致意外行为。由于它是特定于具体情况的,因此您最好进一步阅读文档中有关会话如何传播和处理的内容。除此之外,可能是缓存、浏览器、标题、会话位置、陈旧会话、以前的cookie以及其他相关问题。

我在开发过程中遇到过此问题几次,尽管我从未使用过
Arvixe
。我决不是一个专家,但这是我的研究和经验,也是为什么会出现编码错误的两个主要原因

未根据请求立即创建Cookie 刷新页面时,新创建的Cookie不会立即可用。我以前在使用
SESSION\u ID
和cookies时出现过这种意外行为。例如,如果您在一个请求中设置了cookie,那么它将在服务器的下一个请求之前不可用(因此在设置cookie后的下一次刷新)。

也可能有奇怪的逻辑和浏览器缓存网页的方式,我认为这可能就是这里发生的事情

PHP会话未设置-通过<代码>www
非www
问题 您说过它发生在您的
Arvixe
环境中,而不是本地主机上?您应该在单击“提交”时检查域(删除或添加www)是否正在更改。如果在
htaccess
或通过
ini\u set
设置或PHP中的其他配置设置中没有正确的规则,则可能会得到两个会话ID。我不能很清楚地从你的代码中分辨出来,但如果是这样的话,它会解释为什么你只在第二次得到它(因为第一次提交它会加载新域并设置
会话
变量和
cookie
变量)。您的服务器可能会将
www
视为一个新的子域,而不是选择共享cookie和会话id,而是创建一个新的子域。尝试进入
控制台
并执行
document.cookie
,以获取有关它是否正在更改的信息

无关的
会话
命令或其他原因 如果页面上有任何PHP命令会干扰会话id,例如重新生成会话id或:


这些命令可能会影响您的SES
POST superglobal:
Array
(
    [cmdSubmitPost] => Submit
)

SESSION superglobal:
Array
(
)

COOKIE superglobal:
Array
(
)

[Submit]
POST superglobal:
Array
(
    [cmdSubmitPost] => Submit
)

SESSION superglobal:
Array
(
    [session_var] => SESSION VAR AVAILABLE
)

COOKIE superglobal:
Array
(
    [cookie_var] => COOKIE VAR AVAILABLE
    [PHPSESSID] => 2k6ldfl2icdtj1k7sq5dc9qmj3
    [VC-NoCache] => 1
    [_asomcnc] => 1
)

[Submit]