zoukankan      html  css  js  c++  java
  • 浏览器关闭cookie后,session处理

    我们都知道当在session 会话有基于cookie和基于url两种传递SESSIONID的方法。为了实现客户端禁止cookie发送的情况也不影响客户登陆网站,可以设置 php.ini中 session.use_trans_sid=1 ,表示当客户端浏览器禁止cookie的时候,页面上的链接会基于url传递SESSIONID。但是很多人仅仅设置了这一个选项并没有达到效果,本人也 遇到此问题,后来一番研究发现
    php.ini 文件中还有两个选项

    session.use_cookies=1
    session.use_only_cookies=1

    仔细琢磨上面的英文就会发现其意义
    session.use_cookies表示是否开始基于cookies的session会话
    session.use_only_cookies 表示是否只开启基于cookies的session的会话方式
    所以如果想要在浏览器开启cookie的时候用基于cookie的方式,在未开启cookie的时候使用url的方式就进行如下设置(最常用的方式,推荐)
    在php.ini文件中:

    session.use_trans_sid=1
    session.use_only_cookies=0
    session.use_cookies=1
    或者 在php程序中

    ini_set("session.use_trans_sid","1″);
    ini_set("session.use_only_cookies",0);
    ini_set("session.use_cookies",1);
    如果不管浏览器是否开启cookie,都使用url的方式就进行如下设置(这个例子主要想说明一下设置session.use_only_cookies 和 session.use_cookies的区别)
    在php.ini文件中

    session.use_trans_sid=1
    session.use_only_cookies=0
    session.use_cookies=0
    或者 在php程序中

    ini_set("session.use_trans_sid","1″);
    ini_set("session.use_only_cookies",0);
    ini_set("session.use_cookies",0);
    动手自己试一试 你就会明白session.use_only_cookies 和 session.use_cookies的区别。

    实现了,关键是拿到session_id传值,然后拿到
    1.php
    <?php
    session_start();
    $sid=session_id(); //关键
    $_SESSION['bbbb']="session测试";
    ?>
    <a href="2.php?sid=<?php echo $sid; ?>">下一页</a>

    2.php
    <?php
    session_id($_GET["sid"]);//关键
    session_start();
    echo "传递的session变量aa的值为:".$_SESSION['bbbb'];

    ?>

    客户端禁用cookie以后 session还是可以用,此时session的id值是基于cookie传递的,所以session就不能共享传递了,可以通过在url中附加PHPSESSID的值进行传递,这个就是session的id值。
     
    禁用cookie,sessionid就不能直接传递了,因为http请求时sessionid就是放在cookie里的。你说的通过url传递的,那是变通的方法,服务器端通过session_id()函数可以获知当前session的sessionid,然后在用php生成页面的时候,把sessionid作为参数附加到url里,确实可以实现在禁用cookie的情况下传递sessionid
     
    第一种方式:
    在每个超链接上添加一个PHPSESSID=$sid
    //防止返回初始页产生新的session
    if(isset($_GET["PHPSESSID"])){
       session_id($_GET["PHPSESSID"]);
    }
    session_start();
    $sid=session_id();
    //在每个链接上添加参数PHPSESSID=$sid
    其他页面的获取方式为:
    if(isset($_GET["PHPSESSID"])){
          session_id($_GET["PHPSESSID"])
    }
    session_start();
     
    第二种方式:
    使用session.use_trans_sid=1,php.ini中配置
    这种方式会在url上自动加上SID(href,location,action,注意:js跳转不会添加上SID)
     
    1、设置php.ini的session.use_trans_sid = 1或者打开enable-trans-sid选项,让PHP自动跨页传递session id。
    2、手动通过URL传值、隐藏表单传递session id。
    3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。

  • 相关阅读:
    shell tr命令的使用
    linux find prune排除某目录或文件
    在vue中使用axios发送post请求,参数方式
    webpack官网demo起步中遇到的问题
    css中盒子模型与box-sizing属性
    jquery获得 url的变量
    17-js观察者模式
    基于Jquery ui 可复用的酒店 web页面选择入住日期插件
    webkit浏览器下改变滚动条样式
    用户登录时,禁止chrome提示用户保存密码
  • 原文地址:https://www.cnblogs.com/zhang-bin/p/9641612.html
Copyright © 2011-2022 走看看