修改session的过期(生存)时间

简介: 以下我以php为例,万变不离其宗,希望对大家都有用吧。session与cookie:了解过两者的众所都知道,有些信息保存到cookie,有些出于安全问题就不能直接存到浏览器,这就要用到session了。然而对于浏览器,一般都是默认20-30分钟自动销毁或者关闭浏览器就会销毁。这显示是很头疼的事情,比如我们要实现用户登陆功能,关闭浏览器就要重新登陆,这搞什么鬼?所以我们要去试图改变它们。网上众说纷纭,你可以选择去修改默认配置文件,如php为例,修改php.ini的函数。但是染念却不喜欢修改修改默认,也在网上看到某些程序员是没有权限修改的,所以我们需要做到如何不修改默认文件达到这样的功能。

以下我以php为例,万变不离其宗,希望对大家都有用吧。

session与cookie:

了解过两者的众所都知道,有些信息保存到cookie,有些出于安全问题就不能直接存到浏览器,这就要用到session了。然而对于浏览器,一般都是默认20-30分钟自动销毁或者关闭浏览器就会销毁。这显示是很头疼的事情,比如我们要实现用户登陆功能,关闭浏览器就要重新登陆,这搞什么鬼?所以我们要去试图改变它们。网上众说纷纭,你可以选择去修改默认配置文件,如php为例,修改php.ini的函数。但是染念却不喜欢修改修改默认,也在网上看到某些程序员是没有权限修改的,所以我们需要做到如何不修改默认文件达到这样的功能。

我们可能在网上看到这样的一例子:

屏幕截图 2023-11-30 184225.png

1.通过cookie的有效时间来设置session,我想说,这只是一部分,因为设置cookie有效期没有错,但是你没有传值,怎么达到修改session的生存时间呢。

2.虽然在你执行了一次后,真的session是24小时了,但是当你关闭浏览器后,再打开,session仍然还是需要你重新输入,因为浏览器找不到你的session的id啊...

如何设置session的生存时间呢?要做的就是把session传给cookie,由cookie给我们保存:

屏幕截图 2023-11-30 184306.png

PHP session工作原理 以下以cookie传输PHPSESSID描述。

  1. 客户端请求一个php的服务端地址。
  2. 服务端收到请求,此次php脚本中包含session_start()。
  3. 服务端会生成一个PHPSESSID。(默认session存储方式为session.save_handler=files,文件形式存储。生成的session文件名规则即为sess_PHPSESSID,session文件存在session.save_path中。)
  4. 服务端响应首部Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50;
    path=/。在客户端生成一个cookie保存此PHPSESSID。
  5. 此时,客户端的cookie里面包含了PHPSESSID,之后客户端的每次请求首部Request Headers:Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50。服务端之后每次接收到客户端的请求就都能根据这个PHPSESSID来找到服务端的session文件,通过对这个session文件的读写操作即实现了session的超全局变量属性。

如果客户端禁用了cookie,由于无法使用cookie传递PHPSESSID,那么客户端每次请求,服务端都会重新建立一个session文件,而无法通过通过PHPSESSID来重用session文件,所以session也就失效了。

这种情况可以设置session.use_trans_sid来传输PHPSESSID,具体实现方式与cookie的区别就是将PHPSESSID通过HTTP的GET传输。每次请求的地址里面都会补全PHPSESSID参数”url?PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50”来实现。

顾名思义,phpsessid就是当前会话id,session_id($PHPSESSID)达到当前会话,不然没存在,就要建立一个。然后再通过设置cookie(其实你打开看cookie,就是有PHPSESSID存在,而我们修改了它的存在时间而已),这样我们才能实现session在你想要的时间内过期,即使浏览器关闭了。

目录
相关文章
|
2月前
|
缓存 JavaScript
请问如何在 keep-alive 组件中设置缓存的最大数量和过期时间
请问如何在 keep-alive 组件中设置缓存的最大数量和过期时间
cookie实现上次访问时间
cookie实现上次访问时间
63 0
手把手教你实现线程安全并且可以设置过期时间的LRU缓存。安排!
1. LRU 缓存介绍 2. ConcurrentLinkedQueue简单介绍 3. ReadWriteLock简单介绍 4.ScheduledExecutorService 简单介绍 5. 徒手撸一个线程安全的 LRU 缓存 6. 实现一个线程安全并且带有过期时间的 LRU 缓存 很多人就会问了:“网上已经有这么多现成的缓存了!为什么面试官还要我们自己实现一个呢?” 。咳咳咳,当然是为了面试需要。哈哈!开个玩笑,我个人觉得更多地是为了学习吧!
|
存储 设计模式 数据库
Yii2如何设置session的过期时间?底层原理是什么?
Yii2如何设置session的过期时间?底层原理是什么?
316 0
|
JavaScript
localStorage 设置过期时间?
localStorage 设置过期时间?
localStorage 设置过期时间?
上次更新时间配置
上次更新时间配置
83 0
|
存储 缓存 前端开发
面试官: 如何让localStorage支持过期时间设置?
聊到 localStorage 想必熟悉前端的朋友都不会陌生, 我们可以使用它提供的 getItem, setItem, removeItem, clear 这几个 API 轻松的对存储在浏览器本地的数据进行**「读,写, 删」操作, 但是相比于 cookie, localStorage 唯一美中不足的就是「不能设置每一个键的过期时间」**。
393 0
|
Java 应用服务中间件