当前位置:首页 » 编程语言 » phpsession时间设置时间

phpsession时间设置时间

发布时间: 2023-07-27 00:34:49

⑴ 为什么设置php的session

一、介绍
PHP中session默认过期时间是1440S,超过这个时间没有页面刷新或者用户关闭了浏览器,session就会失效。
二、设置
session文件存储在服务器端,通过保存在用户端的SessionId与服务键液戚器进行交互,session的配置文件是php.ini,相关参数如下:
1.session.use_cookies = 1,默认1,代表SessionId通过cookie来传递,否则会用Query_String
2.session.name = PHPSESSID,默认PHPSESSID,代表SessionID储存的变量名称,可能是Cookie,也可能是Query_String来传递
3.session.cookie_lifetime = 604800,是SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID立即失效,这里我设置了7天
4.session.gc_maxlifetime = 604800,默认是1440,代表session在服务器端保留的时间,超过这个时间就会失效。这里我设置了7天,与客户端的cookie有效时间一致
三、其他情况
一般情况下把这四个值设置好之后就可以更改session的有效期了,但是当多个站点的session文件都保存在公用埋桐临时路径时,由于php的GC(Garbage Collector)机制,某个站点启动垃圾回收机制,都会把公用临时文件目录下的文件全部清除,这就会导致稿陵session失效,解决方法就是更改php.ini里session文件的保存路径:
session.save_path=‘你的路径’;

⑵ php怎么设置某个session的过期时间

可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟) 这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用! 其实不是不起作用,而是因为系统默认: session.gc_probability = 1 session.gc_divisor = 1000...
楼主去后盾人看看,那的学习视频应该可以帮助你解决问题,以及你其他的不太懂的问题

⑶ 我在做一个php网站,ini_set('session.gc_maxlifetime',20);//设置session有效期为20s,

在PHP的文档中明确指出,设定session有效期的参数是session.gc_maxlifetime。可以在php.ini文件中,或者通过ini_set()函数来修改这一参数。问题在于,经过多次测试,修改这个参数基本不起作用,session有效期仍然保持24分钟的默认值。
由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效。当一个有效请求发生时,PHP会根据全局变量session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改)的值,来决定是否启动一个GC(Garbage Collector)。默认情况下,session.gc_probability = 1,session.gc_divisor =100,也就是说有1%的可能性会启动GC。
GC的工作,就是扫描所有的session信息,用当前时间减去session的最后修改时间(modified date),同session.gc_maxlifetime参数进行比较,如果生存时间已经超过gc_maxlifetime,就把该session删除。

⑷ PHP中设置一个严格30分钟过期Session面试题的4种答案

今天在我的微博上发出一个问题:
我在面试的时候,
经常会问一个问题:
“如何设置一个30分钟过期的Session?”,
大家不要觉得看似简单,
这里面包含的知识挺多,
特别适合考察基本功是否扎实,
谁来回答试试?
呵呵
为什么问这个问题呢?
1.我在stackoverflow上看到了有人讨论这个问题
2.想起来我经常问这个问题,
所以~~
在这里,
我来解答下这个题目.
第一种回答
那么,
最常见的一种回答是:
设置Session的过期时间,
也就是session.gc_maxlifetime,
这种回答是不正确的,
原因如下:
1.
首先,
这个PHP是用一定的概率来运行session的gc的,
也就是session.gc_probability和session.gc_divisor(介绍参看
PHP使用Session遇到的一个Permission
denied
Notice解决办法),
这个默认的值分别是1和100,
也就是有1%的机会,
PHP会在一个Session启动时,
运行Session
gc.
不能保证到30分钟的时候一定会过期.
2.
那设置一个大概率的清理机会呢?
还是不妥,
为什么?
因为PHP使用stat
Session文件的修改时间来判断是否过期,
如果增大这个概率一来会降低性能,
二来,
PHP使用”一个”文件来保存和一个会话相关的Session变量,
假设我5分钟前设置了一个a=1的Session变量,
5分钟后又设置了一个b=2的Seesion变量,
那么这个Session文件的修改时间为添加b时刻的时间,
那么a就不能在30分钟的时候,
被清理了.
另外还有下面第三个原因.
3.
PHP默认的(Linux为例),
是使用/tmp
作为Session的默认存储目录,
并且手册中也有如下的描述:
Note:
如果不同的脚本具有不同的
session.gc_maxlifetime
数值但是共享了同一个地方存储会话数据,则具有最小数值的脚本会清理数据。此情况下,与
session.save_path
一起使用本指令。
也就是说,
如果有俩个应用都没有指定自己独立的save_path,
一个设置了过期时间为2分钟(假设为A),
一个设置为30分钟(假设为B),
那么每次当A的Session
gc运行的时候,
就会同时删除属于应用B的Session
files.
所以,
第一种答案是不”完全严格”正确的.
第二种答案
还有一种常见的答案是:
设置Session
ID的载体,
Cookie的过期时间,
也就是session.cookie_lifetime.
这种回答也是不正确的,
原因如下:
这个过期只是Cookie过期,
换个说法这点就考察Cookie和Session的区别,
Session过期是服务器过期,
而Cookie过期是客户端(浏览器)来保证的,
即使你设置了Cookie过期,
这个只能保证标准浏览器到期的时候,
不会发送这个Cookie(包含着Session
ID),
而如果通过构造请求,
还是可以使用这个Session
ID的值.
第三种答案
使用memcache,
redis等,
okey,
这种答案是一种正确答案.
不过,
很显然出题者肯定还会接着问你,
如果只是使用PHP呢?
第四种答案
当然,
面试不是为了难道你,
而是为了考察思考的周密性.
在这个过程中我会提示出这些陷阱,
所以一般来说,
符合题意的做法是:
1.
设置Cookie过期时间30分钟,
并设置Session的lifetime也为30分钟.
2.
自己为每一个Session值增加Time
stamp.
3.
每次访问之前,
判断时间戳.
最后,
有同学问,
为什么要设置30分钟的过期时间:
这个,
首先这是为了面试,
第二,
实际使用场景的话,
比如30分钟就过期的优惠劵?
thanks
:)

⑸ 如何设置session的生存时间

如何修改SESSION的生存时间

我们来手动设置 Session 的生存期:

<?php
session_start();
// 保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
其实 Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用:
<?php
// 保存一天
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_SESSION["admin"] = true;
?>
如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。
php中session过期时间设置
网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime。如果想了解更多session回收机制,继续阅读。(本文环境php5.2)

概述:每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效。

1. session在server端(一般是Apache with PHP mole)如何存在的?困薯

默认的,php会将session保存在/tmp目录下,文件名为这个样子:sess_。每一个文件对应了一个session(会话)。

more /tmp/sess_
username|s:9:”jiangfeng”;admin|s:1:”0″;
#变量名|类型:长度:值
删除这里的session文件,就表示对应禅键的session失效了。

2. session在client端(一般是浏览器)如何存在的?

session在浏览器端,只需要保存session
ID(由server端生成的唯一ID)就可以了。有两种保存方式:在cookie中、在url里面。如果cookie中保存session
ID,就可以看到浏览器的cookie中有一个PHPSESID变量。如果是URL传递的,就可以看到形如:
index.php?PHPSESID=的URL。(在server端通过session.use_cookies来控制使用哪一种方式)

3. 在server端,php如何判断session文件是否过期?

如果”最后的修改时间”到”现在”超过了gc_maxlifetime(默认是1440)秒,这个session文件就被认为是过期了,在下一次session回收的时候,如果这个文件仍然没有被更改过,这个session文件就会被删除(session就过期了)。

简单的说,如果我登录到某网站,如果在1440秒(默认值)内没有操作过,那么对应的session就认为是过期了。

所以,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)

session.gc_maxlifetime = 86400
然后,重启你的web服务(一般是apache)就可以了。

注意:php5里面session过期使用了回收机制。这里设置时间为86400秒,如果session在86400秒内没有被修改过,那么在下一次“回收”时才真的被删除汪袭者。

3. session“回收”何时发生?

默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd
/path/to/sessions; find -cmin +24 | xargs rm

4. 一些特殊情况

因为回收机制会检查文件的“最后修改时间”,所以如果某个会话是活跃的,但是session的内容没有改变过,那么对应的session文件也就没有改变过,回收机制会认为这是一个长时间没有活跃的session而将其删除。这是我们不愿看到的,可以通过增加如下的简单代码解决这个问题:

<?php
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
$_SESSION['last_access'] = time();
?>
代码会每隔60秒,尝试修改修改一次session。

总结:如果想修改session过期时间,修改变量gc_maxlifetime就可以了。php5的session采用被动的回收机制(garbage
collection)。过期的session文件不会自己消失,而是通过触发“回收”来处理过期的session。

热点内容
轮胎存储铭牌 发布:2025-02-07 15:43:38 浏览:73
防盗锁编程 发布:2025-02-07 15:31:33 浏览:859
安卓如何快速选择图片 发布:2025-02-07 15:30:43 浏览:466
硬件组态为什么不能编译 发布:2025-02-07 15:30:43 浏览:42
红帆oa服务器地址查询 发布:2025-02-07 14:31:41 浏览:657
文本框脚本图片 发布:2025-02-07 14:23:28 浏览:231
少儿编程c语言 发布:2025-02-07 14:22:50 浏览:218
一阶低通滤波器c语言 发布:2025-02-07 14:22:37 浏览:852
电脑的东西为什么粘贴不到服务器 发布:2025-02-07 14:21:04 浏览:197
手机脱模解压视频 发布:2025-02-07 14:20:18 浏览:473