繁体   English   中英

$ _SESSION已创建,但$ _SERVER ['HTTP_COOKIE']中没有PHPSESSID

[英]$_SESSION created but theres no PHPSESSID in $_SERVER['HTTP_COOKIE']

我在PHP / Ajax在线购物车上遇到了SESSION变量的一些奇怪问题。

当我第一次查看页面时,会创建SESSION并在页面中工作。 然后,当我导航到同一目录中的另一个PHP页面时,SESSION完全丢失。 奇怪的是, 这只发生过一次 一旦用户在更改页面时完成了完全失去其SESSION的过程,SESSION将在整个购物车中完整地运行。

我开始在每个页面视图上发送自己的$ _SESSION和$ _SERVER数据的var_exports。 似乎第一次查看页面时,SESSION存在并包含数据。 但是$ _SERVER ['HTTP_COOKIE']变量中没有生成PHPSESSID。 在导航到另一个页面时,将创建PHPSESSID并且SESSION将开始工作,但第一个页面视图的初始SESSION数据将丢失。

如果还没有为SESSION生成PHPSESSID,有没有办法生成PHPSESSID? 或者这是典型的行为,与我的随机SESSION损失问题无关? 我正在使用PHP 5.2。

购物车中的每个页面都以完全相同的方式启动:

$title="Title";
$keywords="keywords";
$description="description";
@include('../header_cart.php');

然后在header_cart.php的顶部有:

session_start();
if(!isset($_SESSION['active'])){
    $_SESSION['active']=$_SERVER['REMOTE_ADDR'];
}

在调用session_start()之前,您是否检查过没有输出? (甚至不是白色空间的角色!)。

刷新任何输出后,无法发送HTTP标头,这可能导致尝试告诉客户端初始会话cookie失败。

你在http:和https:?之间切换? 它们有时被视为两个独立的域,并且它们之间可能不共享密钥。

事实证明,它将mydomain.com和www.mydomain.com识别为单独的会话,并存储2个带有2个不同PHPSESSID的cookie。

我将此添加到我的.htaccess文件中,始终将mydomain.com/shop重定向到www.mydomain.com/shop以获取http和https。

RewriteEngine On

#force http://www. to make sure SESSION data is always the same
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{REQUEST_URI} shop
RewriteRule ^(.*)$ http://www.mydomain.com/shop/$1 [R,L]

#force https://www. to make sure SESSION data is always the same
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{REQUEST_URI} shop
RewriteRule ^(.*)$ https://www.mydomain.com/shop/$1 [R,L]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM