为什么会话在某些页面之间丢失,而不是全部?

时间:2015-10-15 21:02:51

标签: php session

我对PHP很陌生,而且我在网店里苦苦挣扎。

我的网站上有一个下拉菜单,其中包含一个菜单选项,其中包含网上商店中的所有产品类别。只要我在这些类别之间导航,我的会话就是持久且工作正常(我将产品放在购物袋中,我可以移动到购物车并完成整个订单)。但是,如果我在另一个下拉菜单中选择“在网站外”(如联系页面),我的会话就会丢失。我使用几乎相同的模板来创建这些页面,但它们当然更简单,主要是文本内容(除了可以从顶部菜单访问的购物车)。

网上商店下拉菜单选项外的第一页是正确的会话ID,但是当我移动到第二页时,会话就消失了。我访问页面的顺序无关紧要。第一个一直在工作,但以下的不是。

究竟是什么导致这种行为?在每一页上,我都从这段代码开始:

<?php
session_start();
?>

<!DOCTYPE HTML>
...

再向下我在顶部菜单中包含购物车:

$path = $_SERVER['DOCUMENT_ROOT'];
$path .= "/includes/right-cart.inc";
include_once($path);

在随附的购物车代码中,我使用此行作为会话ID:

$currSession = session_id();

有什么想法吗?

编辑1:

我尝试添加一些错误记录并注意到一些有趣的东西。我现在用这个开始我的文件(只是为了找到更多信息):

<?php
phpinfo();
ini_set('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));
session_start();
// create session variable if it doesn't exist yet
if (isset($_SESSION['counter']))
  $_SESSION['counter'] ++;
else
  $_SESSION['counter'] = 1;

var_dump($_SESSION); echo "<br/>\n";
var_dump(session_id()); echo "<br/>\n";
var_dump(session_name()); echo "<br/>\n";
var_dump(session_get_cookie_params()); echo "<br/>\n";
?>

只要我有第一行phpinfo();,会话似乎是一样的。但是,如果我删除该行,则会在刷新页面时保持更新...

编辑2

在提出建议后,我尝试使用cookie来存储“会话ID”而不是常规会话。我页面顶部的代码现在看起来像这样:

<?php
session_start();
$currSession = "";
$cookie_name = "sessionId";
$cookie_value = "";
if(!isset($_COOKIE[$cookie_name])) {
    $cookie_value = session_id();
    setcookie(  $cookie_name, $cookie_value, time() + (60*60*24*2), "/");
}
if(count($_COOKIE) > 0) {
    $currSession = $_COOKIE[$cookie_name];
} else {
    $currSession = session_id();
}
?>

但每次重新加载页面时,cookie值似乎也会发生变化。我在代码中尝试了不同的echo语句,以验证发生了什么,但一切看起来都正确(cookie已成功创建,isset函数告诉我实际上已设置cookie等),但cookie中的值仍然会发生变化。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题所以我想我会在这里发布答案以防其他人遇到麻烦。

我改变了这一行(“/”):

setcookie($cookie_name, $cookie_value, time() + (60*60*24*2), "/");

到('/')

setcookie($cookie_name, $cookie_value, time() + (60*60*24*2), '/');

突然它起作用了! : - )