基于Cookie的Session和禁用Cookie的Session

Session简介

  1. session的作用

    它是一种在客户端与服务器之间保持状态的解决方案,它将会话信息(uid等)供浏览器后续请求使用,可以获取并修改变量的值。和cookie一起使用识别同一个客户。

  2. session何时创建

    客户首次访问服务器时,session被创建并分配一个唯一的session_id,并将这个session_id传入客户端cookie中,保持客户端与服务器端的session_id一致.

  3. 如何确认某一位用户?session的有效时间

    当用户再次访问浏览器时,会通过cookie传递session_id,服务器端将通过这个seesion_id确认这个用户并检索出回话信息。但是session回话是临时的,当用户关闭浏览器,或者长时间内不操作,当前session就会失效,当用户再次访问浏览器时,重新分配session_id

以上是基于Cookie的Session,当Cookie被禁用,效果就完全不一样了

PHP下的Session

要想使用开启一个会话,PHP中提供一个函数session_start(),看下这个函数的解释:

bool session_start ( void )

session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。

基于Cookie的session

举例:假设有两段代码page1.php和page2.php

page1.php

session_start();
$_SESSION["fuck"]="fuck";

page2.php

session_start();
echo $_SESSION["fuck"]."<br>";

我们先访问page1.php,然后再访问page2.php,这时候会输出fuck。为什么呢?

首先要说一点,同一个浏览器在访问同一个站点的时候使用的是相同的cookie ,当我们先访问page1.php时,生成了session_id存放在cookie中,下次我们访问page2.php时,直接将session_id传了过去,再看session_start()函数的解释,使用 cookie 提交了会话 ID, 则会重用现有会话。,即他们拥有相同的回话,所以输出fuck

禁止Cookie

我们将浏览器的cookie禁止,看看会有什么效果

1. 禁用之前,我们在page1.php中输出session_id,发现怎么刷这个session_id都不会变,这是因为我们通过cookie传送给服务器端验证后,session_id无误,因此也就不会变化

2. 禁用之后,page1.php在每次刷新后,session_id都会改变,原理很清楚了吧,Cookie被禁用了,session_id传不上去,服务器就以为你这个session_id失效了,所以每次都会重新分配一个session_id给你

3. 这时候再去访问page2.php,并不会有任何输出

禁止Cookie后如何共享session

  1. 通过url参数进行传递,直接将session_id嵌入到URL中去。在session_start()之前添加session_id($session_id),便可以实现session共享
  2. 将session信息写入到文件中
  3. 通过Memcache实现Session共享
  4. 将session存入数据库实现共享

session贡献参考:

http://blog.163.com/zeng_dili/blog/static/175459672010514352830/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-29 03:34:04

基于Cookie的Session和禁用Cookie的Session的相关文章

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_

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

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

Cookie禁用了,Session还能用吗?

Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案.但为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了. 是不是Cookie让禁用了,Session就一定不能用了呢? 1. ASP 在A

JavaWeb基础 session 当浏览器禁用cookie时,可以使用response.encodeURL传递JSESSIONID

礼悟:    好好学习合思考,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼强身心,诚劝且行且珍惜. javaEE:7                  javaSE:1.8          JSTL:1.2.2        server:tomcat 8.5    browser:Chrome/Firefox             os:windows7 x64            ide:MyEclipse 2017 in

PHP--浏览器禁用cookie后,怎么使用session

sessionid是存储在cookie中的,解决方案如下: Session URL重写,保证在客户端禁用或不支持COOKIE时,仍然可以使用Session session机制.session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当 程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器

浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决办法

当浏览器禁用Cookies时,基于Cookie的会话跟踪机制就会失效,解决办法是利用URL重写机制跟踪用户会话. 在使用URL重写机制的时候需要注意,为了保证会话跟踪的正确性,所有的链接和重定向语句中的URL都需要调用encodeURL()或encodeRedirectURL()方法进行编码.另外,由于附加在URL中的SessionID是动态产生的,对于每一个用户都是不同的,所欲对于静态页面的相互跳转,URL重写机制就无能为力了,但是,我们也可以通过将静态页面转换为动态页面来解决这个问题. 在w

php在客户端禁用cookie时让session不失效的解决方法

cookie固然好,不过有些客户端浏览器会禁用cookie,这就会导致你所依赖cookies的程序会失效或出错,那么若真出现用户关闭cookies的情况,PHP应该如何再次使用session?方法还是有的. 1.设置php.ini的session.use_trans_sid = 1或者打开enable-trans-sid选项,让PHP自动跨页传递session id.2.手动通过URL传值.隐藏表单传递session id.3.用文件.数据库等形式保存session_id,在跨页过程中手动调用.

客户端禁用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

Java Web 禁用Cookie对Session的影响

如果客户端禁用了Cookie,那么服务端就不能得到Session了.因为通过Session ID来确定当前会话对应的服务端Session,而Session ID通过Cookie来传递,所以禁用Cookie相当于失去了Session ID,也就得不到Session了. 禁用Cookie时使用Session即传递Session ID的实现方式如下: 1 PHP自动跨页传递 设置php.ini配置文件中的"session.use_trans_sid = 1",或者编译时启用"--e