正如標題所言測試結果為
如果cookie設置是延後定時失效
而非進程級的
那在open後也能看到
所以
針對此情況
防止用戶在使用ie內核出現登錄狀態丟失
可以配合cookie來使用
今天在一個群中有人問到ie中使用js的open發現新窗口中並獲取不到session
經過使用下面的測試代碼測試發現是因為phpsessionid儲存是進程級的有效期只有同一進程才能獲取得到很多人說open後或是target="_blank"都是會打開新的ie進程
所以之前窗口的phpsessionid就不跟著新窗口走導致獲取不到
我自己的測試使用的是ietest//(啟動不起來不確定)都出現相同的情況
但是使用windows自帶的ie測試不存在此情況
chrome也是多線程但是並不存在此情況
firefox不存在此情況
indexphp
復制代碼 代碼如下:
<?php
setcookie(
kkkkk
bbbb
time() +
);
session_start();
$_SESSION[
qidizi
] =
kkkk
;
var_dump( $_SESSION
$_COOKIE);
?>
<input type="button" value="d" onclick="window
open(
/b
php
);" />
<a href="b
php" target="_blank">dddd</a>
bphp 跳出頁面
復制代碼 代碼如下:
<?php
session_start();
var_dump( $_SESSION
$_COOKIE);
從測試中看到如果cookie設置是延後定時失效而非進程級的那在open後也能看到
所以針對此情況防止用戶在使用ie內核出現登錄狀態丟失可以配合cookie來使用
php配置提供一個方式是自動把sid加到uri中但是對於相對路徑並不會自動添加
只不過cookie被禁用這種極端情況極少遇到
cookie+session足夠應付常用情況了
From:http://tw.wingwit.com/Article/program/PHP/201311/20871.html