簡體   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