2013-01-05 74 views
0

第一示例這些關於會話固定的例子是什麼意思?

<?php 
session_start(); 

if(!isset($_SESSION['count'])) $_SESSION['count'] = 0; 
else ++$_SESSION['count']; 

echo $_SESSION['count'] . "<br />"; 
?> 

第二示例

<?php 
session_start(); 
if(!isset($_SESSION['initiated'])) 
{ 
    session_regenerate_id(); 
    $_SESSION['initiated'] = 1; 
} 
if(!isset($_SESSION['count'])) $_SESSION['count'] = 0; 
else ++$_SESSION['count']; 

echo $_SESSION['count'] . "<br />"; 

我找到的唯一不同是,如果我使用兩個不同的網址(例如:訪問http //本地主機/測試PHPSESSID = 123; HTTP //本地主機/測試?PHPSESSID = 456)的第一個腳本會從零重新計數,但第二個將繼續計數

所以什麼兩個例子是什麼意思?它想告訴我什麼?

+0

這些腳本之間的唯一區別是'session_regenerate_id()'塊。你問爲什麼會改變劇本的行爲? – Blender

+0

是的,我不明白這些腳本的結果,當我加入session_regenerate_id(),在$ _SESSION [‘數’]仍然計數 – Roy

回答

0

對不起,我的第一個答案是過於草率。檢查This了。 PHP.net說:

「session_regenerate_id()將用一個新的替換當前的會話ID,並保持當前會話的信息。」

+0

的session_regenerate_id()只重命名該會話ID,並保留所有會話變量不變。 – Class

+0

如果$ _SESSION ['count']變量在腳本執行session_regenerate_id()時被重置,爲什麼$ _SESSION ['count']不會重新計數爲零? – Roy

0

session_regenerate_id()如果可以,將提交一份cookie來保持會話的詳細信息。 將其視爲用戶的擴展會話。因此,如果用戶關閉瀏覽器,用戶會話可以被召回。