【问题标题】:PHP Session Unsetting in Gecko/WebkitGecko/Webkit 中的 PHP 会话取消设置
【发布时间】:2011-12-04 11:36:52
【问题描述】:

我有一个 PHP Session 变量集:

$_SESSION['token']=$_POST['token'];newOrder.php

还设置为$_SESSION['orderId']$_SESSION['stylesUrl']$_SESSION['brand']$_SESSION['currentBalance']

newOrder.php 上有一个链接到templateSelection.php(同一服务器)。

newOrder.php 的底部,我使用以下输出执行print_r($_SESSION)

[token] => {61424637-6E77-BCE0-A10B-3F3E9F74753E}
[currentBalance] => 991.0000
[stylesUrl] => /Management/Stylesheets/basic.css
[brand] => YM
[savedOrderReturnURL] => /Management/DirectMail/DirectMailSaveOrder.aspx

这直接位于newOrder.php 页面的底部,之后只有两行HTML。当用户单击指向templateSelection.php 的链接时,将处理以下 php:

<?php include("php/db.php");
header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');
//$_SESSION['username']="bymtest";
//We seem to be getting an orderId in the session variable even though there wasn't one just before this page was called.
$debugMode = true;
if($debugMode) {
    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>";
    die();
}

php/db.php 内部是:

$dbhost = 'host';
$dbuser = 'un';
$dbpass = 'pw';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$db = mysql_select_db("db");
session_start();

现在这是奇怪的部分。在 Firefox 和 chrome 中,templateSelection.php 中的 print_r 输出:

[token] => 
[currentBalance] => 991.0000
[stylesUrl] => /Stylesheets/basic.css
[brand] => YM
[savedOrderReturnURL] => /Management/DirectMail/DirectMailSaveOrder.aspx

但是在 Opera 和 IE9/8/7/6 中它输出

[token] => {61424637-6E77-BCE0-A10B-3F3E9F74753E}
[currentBalance] => 991.0000
[stylesUrl] => /Management/Stylesheets/basic.css
[brand] => YM
[savedOrderReturnURL] => /Management/DirectMail/DirectMailSaveOrder.aspx

session_start 总是设置,我已经在多台计算机上尝试过......这毫无意义!这也曾在同一服务器上的不同 URL 上工作过。

【问题讨论】:

  • 试试echo htmlspecialchars(print_r($_SESSION, true));。以防万一。并在您设置会话值的页面上的 $_POST 数组上执行相同的操作。
  • 在firefox中查看页面的来源,应该是正常的!
  • @hakre 谢谢,templateSelection.php(空白)上的输出仍然相同。 newOrder.php 提供与以前相同的输出,并且 post 的值相同:[token] =&gt; {61424637-6E77-BCE0-A10B-3F3E9F74753E}
  • 我建议始终将session_start() 作为 PHP 执行期间调用的第一个函数。
  • 如果 newOrder.php $_SESSION 的末尾仍然包含所有值,则需要验证(在打开 templateSelection.php 之前)该值已实际保存到磁盘上的会话文件中会话文件查看器,这是一个:github.com/ktomk/Serialized/blob/master/examples/03-session/…

标签: php firefox session google-chrome


【解决方案1】:

正如@Griwes 建议的那样,您需要在脚本顶部调用session_start()

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2013-02-17
    • 2015-10-08
    • 2016-08-03
    • 2012-08-04
    • 2014-04-03
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多