程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> ie與session丟失(新窗口cookie丟失)實測及解決方案

ie與session丟失(新窗口cookie丟失)實測及解決方案

編輯:關於PHP編程
    正如標題所言測試結果為:如果cookie設置是延後定時失效,而非進程級的,那在open後也能看到,所以,針對此情況,防止用戶在使用ie內核出現登錄狀態丟失,可以配合cookie來使用  

    今天在一個群中有人問到ie6中使用js的open,發現新窗口中並獲取不到session,
    經過使用下面的測試代碼測試發現,是因為phpsessionid儲存是進程級的有效期,只有同一進程才能獲取得到,很多人說,open後或是target="_blank",都是會打開新的ie進程,
    所以,之前窗口的phpsessionid就不跟著新窗口走,導致獲取不到.
    我自己的測試使用的是ietest,6/7/8(9啟動不起來,不確定),都出現相同的情況.
    但是使用windows自帶的ie10測試不存在此情況.
    chrome也是多線程,但是並不存在此情況.

    firefox不存在此情況.
    index.php

    復制代碼 代碼如下:
    <?php
    setcookie('kkkkk','bbbb', time() + 1111111);
    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>


    b.php 跳出頁面

    復制代碼 代碼如下:
    <?php
    session_start();
    var_dump( $_SESSION,$_COOKIE);


    從測試中看到,如果cookie設置是延後定時失效,而非進程級的,那在open後也能看到,
    所以,針對此情況,防止用戶在使用ie內核出現登錄狀態丟失,可以配合cookie來使用,
    php配置提供一個方式是自動把sid加到uri中,但是對於相對路徑並不會自動添加,
    只不過,cookie被禁用這種極端情況,極少遇到,
    cookie+session足夠應付常用情況了.

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved