浏览器关闭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,在跨页过程中手动调用。

原文地址:https://www.cnblogs.com/zhang-bin/p/9641612.html

时间: 2024-11-14 14:57:34

浏览器关闭cookie后,session处理的相关文章

客户端禁用Cookie后session失效的问题

客户端禁用Cookie后session会失效,该如何解决? 解决方法:使用URL重写技术 URL重写:在原来的URL后面加上";jsessionid=123456789" 即:url--->url;JSESSIONID=123 注意: *For robust session tracking, all URLs emitted by a servlet should be run through this method. Otherwise, URL rewriting cann

php 会话控制(禁用cookie后session为什么会失效?)

首先说明一点:session不一定必须依赖cookie,只是php默认客户端sessionid基于cookie方式保存. 到此,我想你也应该了解了php默认的session客户端保存方式是基于cookie的,所以一旦客户端禁用Cookie,那么session跨页将会失效,不知道这么描述是否合适,通俗的说无状态的东西要变的有状态,只能两边都进行比对,如果用cookie方式保存的SessionID,客户端这边的比对条件就放到cookie里,所以客户端禁用cookie,session便也会随之失效.p

禁用cookie后session是如何传递

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

禁用cookie后session是如何设置的

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

PHP中禁用cookie后session的实现

一.问题叙述: 已经知道,session的实现是基于cookie的.是将session的id通过cookie在客户端和服务器端传递.然后在各个页面之间保持同一个session.但如果用户将客户端浏览器的cookie禁用了之后,应该如何实现session信息呢? 解决办法是:通过在URL后面附加session_id的信息来维持不同页面之间的session_id的传递. 1 //create_session.php 2 <?php 3 session_start(); 4 $_SESSION['na

session和cookie区别,多台WEB服务器如何共享session,禁用COOKIE后SESSION是否可用,为什么?

答:session的运行机制: 用户A访问站点Y,如果站点Y指定了session_start();(以下假设session_start()总是存在)那么会产生一个session_id,这个session_id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSIONID必须以COOKIE专递.).这时候SESSIONID表现为$_COOKIE[‘PHPSESSID’];(PHPSESSID可用session_

用户浏览器关闭cookie处理方法

方法一: function getSessionId(){ var c_name = "jsessionid"; // alert("cookie:"+document.cookie + " " + window.location.href ); var hrefStr = window.location.href; if(hrefStr.length > 0){ c_start = hrefStr.indexOf(c_name + &qu

javaWeb核心技术第八篇之Cookie和Session

会话技术: 会话是什么? 浏览器和服务器交互,浏览器打开网页访问服务器,会话开始,正常交互. 浏览器关闭,会话结束. 会话能干什么? 会话可以共享数据. Cookie和session将数据保存在不同的位置 进行数据共享 Cookie入门案例 1.创建一个cookie对象 a. Cookie cookie = new Cookie(String name,String value); 2.响应给浏览器 a.Response.addCookie(cookie) 3.再次请求时需要获得cookie a

浏览器关闭后,Session会话结束了么?

今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了? 我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保 存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗 口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!下面就具体的去解释: 当用户第一次访问Web应用中支持Session的某个网页时,就会开始一个新的Session, 那么接下来当用户浏览这个Web应用的不同网页时,始终处于一个Se