当前位置:首页 > PHP教程 > php会话 > 列表

PHP 客户端禁用cookie后session解决方案

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-09 16:38:17 浏览: 评论:0 

cookie本身就是写在客户端的了,但是如果客户浏览器把cookie给禁用了,那么cookie就无法正常使用了,碰到此问题我们可以使用session来代替了,希望对各位有帮助.

PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了,必须注意的是:session不一定必须依赖cookie,这也是 session相比cookie的高明之处,当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了,但这种附着也是有一定条件的,即“php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”.

所以,我们可以抛开cookie使用session,即假定用户关闭cookie的情况下使用session,其实现途径有以下几种:

第一种方式:在每个超链接上添加一个PHPSESSID=$sid,代码如下:

  1. //防止返回初始页产生新的session 
  2. if(isset($_GET["PHPSESSID"])){ 
  3. session_id($_GET["PHPSESSID"]); 
  4. //开源软件:phpfensi.com 
  5. //启动一个session 
  6. session_start(); 
  7. //获取当前session的session_id() 
  8. $sid=session_id(); 
  9. //在每个链接上添加参数PHPSESSID=$sid 
  10. 其他页面的获取方式为: 
  11. if(isset($_GET["PHPSESSID"])){ 
  12. //设置当前的session为初始的session,session_id()一致即可 
  13. session_id($_GET["PHPSESSID"]) 
  14. session_start(); 

第二种方式:使用 SID 常量替换链接上的 PHPSESSID=$sid(SID的值类似:PHPSESSID=sddg34r593dfdlksrewr),代码如下:

  1. if(isset($_GET["PHPSESSID"])){ 
  2. session_id($_GET["PHPSESSID"]); 
  3. //启动一个session 
  4. session_start(); 

其他页面的获取方式为:

  1. if(isset($_GET["PHPSESSID"])){ 
  2. //设置当前的session为初始的session,session_id()一致即可 
  3. session_id($_GET["PHPSESSID"]) 
  4. session_start(); 

第三种方式:使用session.use_trans_sid=1,php.ini中配置

1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id.

2、手动通过URL传值、隐藏表单传递session id.

3、用文件、数据库等形式保存session_id,在跨页过程中手动调用,代码如下:

  1. index.php 
  2. <? 
  3. session_start();  
  4.   $_SESSION['name']="Aseoe";  
  5.   $sn = session_id();  
  6.   $url=".""index2.php?s=".$sn."">下一页";  
  7.   echo $url;  
  8. ?>  
  9. //开源软件:phpfensi.com 
  10. index2.php  
  11.   $_GET[’s’]);     
  12.   session_start();     
  13.   echo "传递的session变量name的值为:".$_SESSION['name'];   
  14. ?>

Tags: PHP禁用cookie PHP禁用session

分享到: