ie与session丢失(新窗口cookie丢失)实测及解决方案

正如标题所言测试结果为:如果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足够应付常用情况了.

时间: 2024-11-02 11:08:51

ie与session丢失(新窗口cookie丢失)实测及解决方案的相关文章

ie与session丢失(新窗口cookie丢失)实测及解决方案_php技巧

今天在一个群中有人问到ie6中使用js的open,发现新窗口中并获取不到session, 经过使用下面的测试代码测试发现,是因为phpsessionid储存是进程级的有效期,只有同一进程才能获取得到,很多人说,open后或是target="_blank",都是会打开新的ie进程, 所以,之前窗口的phpsessionid就不跟着新窗口走,导致获取不到. 我自己的测试使用的是ietest,6/7/8(9启动不起来,不确定),都出现相同的情况. 但是使用windows自带的ie10测试不存

php页面跳转session cookie丢失导致不能登录等问题的解决方法_php实例

thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆. 通过查找资料,发现原来是bom头的原因.受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效.一切依赖COOKIE.SESSION实现的功能全部无效. 正确的处理方法是去掉某些文件的bom,一般情况是在入口文件出现的

php页面跳转session cookie丢失导致不能登录等问题的解决方法

thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆. 通过查找资料,发现原来是bom头的原因.受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效.一切依赖COOKIE.SESSION实现的功能全部无效. 正确的处理方法是去掉某些文件的bom,一般情况是在入口文件出现的

response.redret()之后 cookie丢失

问题描述 response.redret()之后 cookie丢失 http://localhost:8090/ssoClient/Crossdomain.aspx?ReturnUrl=http://localhost:8090/ssoClient/helloServlet&ReturnHost=localhost 在这个请求写还有cookie,redirect到http://localhost:8090/ssoClient/helloServlet 就把cookie丢了, 代码: respon

[紧急求助]内网Win Server2008部署站点,域名访问时在IE中Cookie丢失

问题描述 [紧急求助]内网WinServer2008部署站点,域名访问时在IE中Cookie丢失我在公司内网的一台WindowsServer2008服务器上部署了一个mvc的站点(结合一个CMS:Sitefinity),设置了域名并修改host实现域名访问(内含子站点).然后发现通过FF,Chorme等都能通过该域名正常访问并登陆.但是IE下通过域名访问就会Cookie丢失,所以也不能登录,直接IP加端口就不会丢失cookie.IE中域名访问时可以看到请求里面有接收到cookie,但是点击"开发

【新手求助】asp.net 使用jquery.cookie插件操作cookie丢失

问题描述 在客户端,使用jquery.cookie插件操作cookie来保持状态,发现两个页面之间的cookie是独立存在的,比如$.cookie("dateStart")这个cookie,在第一个页面和第二个页面的值不一样 解决方案 解决方案二:发现不是丢失,而是同一个页面出现相同key的cookie,为什么呢解决方案三:换个浏览器看看解决方案四:引用2楼SaRoot的回复: 换个浏览器看看 还是一样的解决方案五:用vs的小服务器吧?换在IIS里试试~!解决方案六:引用2楼SaRoo

Ajax跨域访问Cookie丢失问题的解决方法

ajax跨域访问,可以使用jsonp方法或设置Access-Control-Allow-Origin实现,关于设置Access-Control-Allow-Origin实现跨域访问可以参考之前我写的文章<ajax 设置Access-Control-Allow-Origin实现跨域访问> 1.ajax跨域访问,cookie丢失 首先创建两个测试域名 a.fdipzone.com 作为客户端域名 b.fdipzone.com 作为服务端域名 测试代码 setcookie.PHP 用于设置服务端co

解决ajax跨域请求数据cookie丢失问题

前端: 以jquery为例: 需要加入 复制代码 代码如下: xhrFields: {             withCredentials: true         },         crossDomain: true, $.ajax({         type: postType,         url: url,         data: postData || '',         xhrFields: {             withCredentials: tru

详解PHP中cookie和session的区别及cookie和session用法小结

具体来说 cookie 是保存在"客户端"的,而session是保存在"服务端"的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cookie不设置生命周期,则以浏览器关闭而关闭,这种cookie一般存储在内存而不是硬盘上.若设置了生命周期则相反,不随浏览器的关闭而消失,这些cookie仍然有效直到超过设定的过 期 时间. session 一种类似散列表的形式保存信息, 当程序需要为某个客户端的请求创建一个