浏览器在不开启Cookie下Session处理小结
2012-02-29 18:08
537 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。/article/4319826.html
记得刚开始接触web开发的时候就遇到这类的问题关于Session和Cookie的一些争论。两者都是用来暂存数据的,这里就不说Session和Cookie的区别了,一般情况下Session需要Cookie的支持,但是有时候客户端安全设置高了那么Cookie就会被禁用(虽然到现在我还没有在实际开发中遇到过)但是这种情况是确实会存在的。下面我们来说下在Cookie禁用了以后Session怎么用,(注意:在一个脚本是可以用的 关键同一服务器不同脚本的访问)
首先Session依赖Cookie的地方在于Cookie记录下一个唯一的标识 sessionid,服务器端默认的会读取客户端的cookie中的sessionid如果没有的情况下那么session就会丢失,那么关键点就在于sessionid的获取上。
其次如果只有sessionid那么也是无法获取或者解析session中的这个id的数据那么这个问题就是session的存储问题,如果禁用了cookie那么session的存储就要我们特别处理不管是存到数据库还是文件中,需要单独存储,这里因为为了脚本的简单就用sessionid 作为文件名存储session的数据
今天写了一个小脚本用来测试,
第一步:这一步是我在做测试中突然想到的如果客户端禁用了Javascript这里必须支持Javascript所以要验证下
如果客户端不支持Javascript那么就会有文本提示让用户开启
第二步:检测是否支持Cookie
关键函数
如果开启那么很好我们正常流程走
假如不开启,那么我会在浏览器载入完成后的时候重新载入,不过这次载入我会在原来的url后面加上一个浏览器不支持cookie的参数
PHP接收后就会特别处理session
关键函数
Javascript
PHP
然后在页面中我会对特定的url中加上session_id 这样在网站中就可以使用session_id了
那么这样就算处理完成,整体的代码
目录结构:
set.php //入口
show.php //共享session 查看session
20rt5ja239sipblatlng8o0084.txt//这个你可以指定个目录或者数据库存储 session数据
20rt5ja2*************o0084.txt
set.php Code
show.php Code
Session 存储文件内容 我这里序列化了数组保存
a:1:{s:7:"session";s:7:"session";}
基本上就这些,哈哈虽然有点凌乱但是终于解决了,以前一直拖,拖着不是个事,早晚要解决,就算到一点嘿嘿值得滴!
结果是这样滴:作为参考
图一:
本文出自 “web开发之php” 博客,请务必保留此出处/article/4319826.html
原始出处 、作者信息和本声明。否则将追究法律责任。/article/4319826.html
记得刚开始接触web开发的时候就遇到这类的问题关于Session和Cookie的一些争论。两者都是用来暂存数据的,这里就不说Session和Cookie的区别了,一般情况下Session需要Cookie的支持,但是有时候客户端安全设置高了那么Cookie就会被禁用(虽然到现在我还没有在实际开发中遇到过)但是这种情况是确实会存在的。下面我们来说下在Cookie禁用了以后Session怎么用,(注意:在一个脚本是可以用的 关键同一服务器不同脚本的访问)
首先Session依赖Cookie的地方在于Cookie记录下一个唯一的标识 sessionid,服务器端默认的会读取客户端的cookie中的sessionid如果没有的情况下那么session就会丢失,那么关键点就在于sessionid的获取上。
其次如果只有sessionid那么也是无法获取或者解析session中的这个id的数据那么这个问题就是session的存储问题,如果禁用了cookie那么session的存储就要我们特别处理不管是存到数据库还是文件中,需要单独存储,这里因为为了脚本的简单就用sessionid 作为文件名存储session的数据
今天写了一个小脚本用来测试,
第一步:这一步是我在做测试中突然想到的如果客户端禁用了Javascript这里必须支持Javascript所以要验证下
<html> <head> <title>客户端Javascript/Cookie/Session 检测</title> <meta charset="UTF-8"/> <script type="text/Javascript"> var phpZF = {}; phpZF.checkJavascriptEnable = function(){//检查浏览器是否支持Javascript var check_javascript_enable = document.getElementById('phpZF_check_javascript_enable'); check_javascript_enable.parentNode.removeChild(check_javascript_enable); } window.onload = function(){ //这里用的是onload domready更好,要判断domready需要另写代码,回头单独写 phpZF.checkJavascriptEnable();//检查浏览器是否支持Javascript } </script> </head> <body> <div id="phpZF_check_javascript_enable"><h1>您的浏览器没有开启Javascript,本网站将无法正常运行,请开启Javascript</h1></div> </body> </html>
如果客户端不支持Javascript那么就会有文本提示让用户开启
第二步:检测是否支持Cookie
关键函数
phpZF.checkCookieEnable = function(){//检查浏览器是否开启Cookie var cookie_enable = false; if(navigator.cookiesEnabled) return true; document.cookie = "checkCookie=yes"; var cookieSet = document.cookie; if(cookieSet.indexOf("checkCookie=yes") > -1) cookie_enable = true; document.cookie = ""; return cookie_enable; }
如果开启那么很好我们正常流程走
假如不开启,那么我会在浏览器载入完成后的时候重新载入,不过这次载入我会在原来的url后面加上一个浏览器不支持cookie的参数
PHP接收后就会特别处理session
关键函数
Javascript
phpZF.unableCookieShareSession = function() { //在关闭Cookie的情况下使用session alert('对不起,您的浏览器Cookie功能禁用,请开启'); var session_id = '<?php echo $session_id;?>'; var parms=new RegExp("[?]"); if(session_id == 0){ var newURL = document.URL + '?CookieUnable=1'; if(parms.exec(document.URL) !== null) newURL = document.URL + '&CookieUnable=1'; window.location.href = newURL; }else{ var share_Session = document.getElementById('phpZF_share_Session'); if(parms.exec(share_Session.href) !== null){ share_Session.href = share_Session.href + '&session_id='+session_id; } else { share_Session.href = share_Session.href + '?session_id='+session_id; } } }
PHP
<?php session_start(); isset($_SESSION['session'])?null:$_SESSION['session']='session'; if(@$_GET['CookieUnable'] == '1' ){//如果当前浏览器关闭cookie 那么重新加载 $session_id = session_id(); //获取当前的session_id; $file_name = $session_id.'.txt';//这里暂时用文件保存 可以用任何的存储介质,通常为数据库这里为了讲述方法用创建文件解决 $handle = fopen($file_name,'w'); fwrite($handle, serialize($_SESSION)); fclose($handle); }else{ $session_id = 0; } ?>
然后在页面中我会对特定的url中加上session_id 这样在网站中就可以使用session_id了
<body> <div id="phpZF_check_javascript_enable"><h1>您的浏览器没有开启Javascript,本网站将无法正常运行,请开启Javascript</h1></div> <div> <a id="phpZF_share_Session" href="show.php">Server Session Information</a>; </div> </body> </html>
那么这样就算处理完成,整体的代码
目录结构:
set.php //入口
show.php //共享session 查看session
20rt5ja239sipblatlng8o0084.txt//这个你可以指定个目录或者数据库存储 session数据
20rt5ja2*************o0084.txt
set.php Code
<?php session_start(); isset($_SESSION['session'])?null:$_SESSION['session']='session'; if(@$_GET['CookieUnable'] == '1' ){//如果当前浏览器关闭cookie 那么重新加载 $session_id = session_id(); //获取当前的session_id; $file_name = $session_id.'.txt';//这里暂时用文件保存 可以用任何的存储介质,通常为数据库这里为了讲述方法用创建文件解决 $handle = fopen($file_name,'w'); fwrite($handle, serialize($_SESSION)); fclose($handle); }else{ $session_id = 0; } ?><html>
<head>
<title>客户端Javascript/Cookie/Session 检测</title>
<meta charset="UTF-8"/>
<script type="text/Javascript">
var phpZF = {};
phpZF.checkJavascriptEnable = function(){//检查浏览器是否支持Javascript
var check_javascript_enable = document.getElementById('phpZF_check_javascript_enable');
check_javascript_enable.parentNode.removeChild(check_javascript_enable);
}
phpZF.checkCookieEnable = function(){//检查浏览器是否开启Cookie var cookie_enable = false; if(navigator.cookiesEnabled) return true; document.cookie = "checkCookie=yes"; var cookieSet = document.cookie; if(cookieSet.indexOf("checkCookie=yes") > -1) cookie_enable = true; document.cookie = ""; return cookie_enable; }phpZF.unableCookieShareSession = function() { //在关闭Cookie的情况下使用session alert('对不起,您的浏览器Cookie功能禁用,请开启'); var session_id = '<?php echo $session_id;?>'; var parms=new RegExp("[?]"); if(session_id == 0){ var newURL = document.URL + '?CookieUnable=1'; if(parms.exec(document.URL) !== null) newURL = document.URL + '&CookieUnable=1'; window.location.href = newURL; }else{ var share_Session = document.getElementById('phpZF_share_Session'); if(parms.exec(share_Session.href) !== null){ share_Session.href = share_Session.href + '&session_id='+session_id; } else { share_Session.href = share_Session.href + '?session_id='+session_id; } } }
window.onload = function(){ //这里用的是onload domready更好,要判断domready需要另写代码,回头单独写
phpZF.checkJavascriptEnable();//检查浏览器是否支持Javascript
if(!phpZF.checkCookieEnable())//检查浏览器是否支持Cookie
phpZF.unableCookieShareSession();//在不支持Cookie的情况下处理session问题
}
</script>
</head>
<body> <div id="phpZF_check_javascript_enable"><h1>您的浏览器没有开启Javascript,本网站将无法正常运行,请开启Javascript</h1></div> <div> <a id="phpZF_share_Session" href="show.php">Server Session Information</a>; </div> </body> </html>
show.php Code
<?php if(isset($_GET['session_id'])){ header("Content-type:text/html;charset=UTF-8"); $file_name = $_GET['session_id'].'.txt'; if(file_exists($file_name)){ $Session = unserialize(file_get_contents($file_name)); echo '<pre>关闭Cookie下'; print_r($Session); } }else{ session_start(); header("Content-type:text/html;charset=UTF-8"); echo '<pre>开启Cookie下'; print_r($_SESSION); }
Session 存储文件内容 我这里序列化了数组保存
a:1:{s:7:"session";s:7:"session";}
基本上就这些,哈哈虽然有点凌乱但是终于解决了,以前一直拖,拖着不是个事,早晚要解决,就算到一点嘿嘿值得滴!
结果是这样滴:作为参考
图一:
本文出自 “web开发之php” 博客,请务必保留此出处/article/4319826.html
相关文章推荐
- 浏览器在不开启Cookie下Session处理小结 推荐
- 关闭浏览器,和浏览器禁用cookie时Session处理的方法
- 浏览器禁用Cookie后的session处理
- java web 对cookie技术、session技术进行小结
- PHP会话处理——Cookie和Session
- 关于浏览器缓存,cookie , session
- PHP中浏览器禁用COOKIE时SESSION的安全使用方法
- cookie技术、session技术进行小结。
- 用户浏览器禁用了cookie,SessionID如何传递
- 一个小型浏览器架构:HTTP通讯、COOKIE处理、HTML解析、JS模拟、表单处理
- 从浏览器请求服务器 session和cookie的流程
- CSS对浏览器的兼容性常见处理方式小结
- 用户浏览器禁用了cookie,SessionID如何传递
- session不一定非得要cookie开启才能使用。也可以使用get传递参数
- PHP5薄荷教程[12]对头信息、表单、cookie和session的处理
- 日常小结-关于模拟登陆的小结-抓包、cookie、session和token
- JSESSIONID、cookie与SESSION的区别和联系 同名JSESSIONID处理
- 利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题
- 在禁用Cookie的浏览器中使用Session
- 【Session】session把id号存在cookie中、session的URL重写把id加载URL上、购物车(关闭浏览器、禁用cookie)