资讯专栏INFORMATION COLUMN

session理解

phpmatt / 1902人阅读

摘要:理解还是那句。。。。而还不是很理解的,谷歌下,要理解这两个东西其实也不难。。当浏览器端禁用时,这个依然会被创建。其实我的理解很简单不对的地方欢迎指出。。

session理解

还是那句。。。。新手上路。。大神欢迎指点

1.session的概念

其实什么是session?什么是cookie?这些都是些老掉牙的问题了。。而做过相关的开发的人,基本都知道。。而还不是很理解的,谷歌下,要理解这两个东西其实也不难。。那这里我就不去探讨这个问题了。。

2.cookie与session的关系

说下我的理解吧:

cookie和session的方案虽然分别属于客户端和服务端,但是服务端的session的实现对客户端的cookie有依赖关系的;步骤大概如下:

服务端执行Session机制

生成对应而唯一的session_id(通过对这个session_id的解析和处理,服务端可以找到,该session保存的文件;再从文件中提取出session的信息)

服务端会将这个session_id发送给客户端

客户端接受到session_id,以cookie作为保存的容器保存起来

客户端在每次请求的时候都会带这个session_id给服务端

服务端自行解析session

注意:session保存信息的手段是多种的:缓存,数据库,文件等;但是默认是文件形式保存。。。

问题:

禁用了cookie后,session还能使用吗?

app就真的不可以使用session吗?

为了探讨上面的问题。。我们先看看 session 创建和销毁的时机。。

3.创建 session和销毁session的时机

创建session的时候会附带着创建一个cookie,它的MaxAge为-1,也就是说只能存在于内存中。当浏览器端禁用cookie时,这个cookie依然会被创建。

当浏览器提交的请求中有jsessionid参数或cookie报头时,容器不再新建session,而只是找到先前的session进行关联。这里又分为两种情况:

1)使用jsessionid。该值若能与现有的session对应,就不创建新的session,否则,仍然创建新的session。

2)使用cookie。该值若能与现有的session对应,也不创建新的session;但若没有session与之对应(就如上面的重启服务器之后)容器会根据cookie信息恢复这个与之对应的session,就好像是以前有过一样。

session何时被销毁?
当我们关闭浏览器,再打开它,连接服务器时,服务器端会分配一个新的session,也就是说会启动一个新的会话。那么原来的session是不是被销毁了呢?我做了个小实验:

创建一个session:

//启动session的初始化
session_start();
//注册session变量,并且赋值
$_SESSION["username"] = "hello"
//输出生成的session_id
echo session_id();

访问页面创建session,获取session_id,关闭浏览器;

根据session_id创建session对象

//上面输出的session_id
$session_id = "qpk6onnn3husvotnke030ftcm4";
session_id($session_id);
session_start();
echo $_SESSION["username"];

结果可以取出 "hello"

由此可以看出:

当浏览器关闭时,原session并没有被销毁(destory方法没有执行),而是等到timeout到期,才销毁这个session。关闭浏览器只是在客户端的内存中清除了与原会话相关的cookie,再次打开浏览器进行连接时,浏览器无法发送cookie信息,所以服务器会认为是一个新的会话。因此,如果有某些与session关联的资源想在关闭浏览器时就进行清理(如临时文件等),那么应该发送特定的请求到服务器端,而不是等到session的自动清理。

4.回归问题。。

其实我的理解很简单(不对的地方欢迎指出)。。

只要有session_id就可以找到session。。。

cookie 是保存唯一识别(session_id)的手段;

禁用cookie 或者 本来就不支持cookie,但是通过其他手段,也能实现cookie实现的功能。服务器只要有session_id;还是能找到对应的session的;只是session机制,内部本来是通过cookie自动实现的。。。如果不采取cookie的话,就要自己去逻辑实现。。。感觉有点变味了,但是猪肉变质了,还是猪肉啊。。。具体看自己怎么看。。。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25929.html

相关文章

  • 深入理解flask框架(4):session

    摘要:中的实现是基于。打开源码的文件,我们可以看到最后的接口类中,主要有两个函数。这个系列就此完结。 flask中session的实现是基于cookie。打开flask源码的session.py文件,我们可以看到最后的接口类中,主要有open_session,save_session两个函数。 class SecureCookieSessionInterface(SessionInterfa...

    PingCAP 评论0 收藏0
  • Cookies和Session的区别和理解

    摘要:和的区别和理解机制是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。的作用就是为了解决协议无状态的缺陷所作的努力。这种生命期为浏览器会话期的被称为会话。而机制采用的是一种在服务器端保持状态的解决方案。 Cookies和Session的区别和理解 cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 296...

    RyanQ 评论0 收藏0
  • 深入 Flask 源码理解 Context

    摘要:主要的作用是将维护的字典中键为对应的值定义为。如果没有,则会将当前到中,同时将加入列表中否则添加。注意清理之后的动作。上述代码涉及到,它强调必须是一个可调用对象。后期的工作之一是了解。这仅仅是我的个人理解。实际上这是解决多个实例运行的问题。 Flask 中的上下文对象 知乎问题 编程中什么是「Context(上下文)」 已经能够简单地说明什么是 Context,它是一个程序需要的外部对...

    ninefive 评论0 收藏0
  • 理解HTTP session原理及应用

    摘要:理解原理及应用一术语在我的经验里,这个词被滥用的程度大概仅次于,更加有趣的是与在某些语境下的含义是相同的。其中的作用就是为了解决协议无状态的缺陷所作出的努力。 理解HTTP session原理及应用 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。 ...

    dreamGong 评论0 收藏0
  • 深入理解hibernate的三种状态

    摘要:好了,废话不多说了,相信大家都知道的这三种状态的含义,那我们就通过一张图来开始我们的深入的三种状态之旅吧。 原文地址: http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detac...

    Scorpion 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<