关于PHP5 Session生命周期介绍

开发 后端
PHP5 Session提供了一个函数 session_set_cookie_params(),来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用。

PHP5有很多值得学习的地方,这里我们主要介绍PHP5 Session的使用,Session 是如何来判断客户端用户的呢?它是通过 Session ID 来判断的,什么是 Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证***性和随机性,确保Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 Session ID。

如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。我们来手动设置 Session 的生存期:

  1. <?php   
  2. session_start();   
  3. // 保存一天   
  4. $lifeTime = 24 * 3600;   
  5. setcookie(session_name(), session_id(), time() + $lifeTime, "/");   
  6. ?>  

其实PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用:

  1. <?php   
  2.  
  3. // 保存一天   
  4. $lifeTime = 24 * 3600;   
  5. session_set_cookie_params($lifeTime);   
  6. session_start();   
  7. $_SESSION["admin"] = true;   
  8.  
  9. ?>   

#T#如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。假设客户端禁用 Cookie 怎么办?没办法,所有生存周期都是浏览器进程了,只要关闭浏览器,再次请求页面又得重新注册 Session。那么怎么传递 Session ID 呢?通过 URL 或者通过隐藏表单来传递,PHP 会自动将 Session ID 发送到 URL 上,URL 形如:http://www.openphp.cn /index.php?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669,其中 URL 中的参数 PHPSESSID 就是 Session ID了,我们可以使用 $_GET 来获取该值,从而实现 Session ID 页面间传递。

  1. <?php   
  2.  
  3. // 保存一天   
  4. $lifeTime = 24 * 3600;   
  5. // 取得当前 Session 名,默认为 PHPSESSID   
  6. $sessionName = session_name();   
  7. // 取得 Session ID   
  8. $sessionID = $_GET[$sessionName];   
  9. // 使用 session_id() 设置获得的 Session ID   
  10. session_id($sessionID);   
  11.  
  12. session_set_cookie_params($lifeTime);   
  13. session_start();   
  14. $_SESSION["admin"] = true;   


 

责任编辑:田树 来源: it168
相关推荐

2009-06-24 10:47:55

JSF生命周期

2009-11-18 10:39:45

PHP5配置

2009-11-23 20:00:25

PHP5接口PHP5抽象类

2009-07-23 18:14:17

MVC生命周期

2009-11-18 18:33:23

Linux PHP5安

2009-08-04 16:50:15

ASP.NET页面生命

2015-07-08 16:28:23

weak生命周期

2009-11-17 14:01:01

Apache 2 PH

2022-04-19 07:20:24

软件开发安全生命周期SSDLC应用安全

2009-11-23 13:27:22

PHP5指针

2010-07-14 10:48:37

Perl线程

2009-06-11 11:28:35

JSF生命周期

2021-07-19 05:52:29

网络生命周期网络框架

2013-08-19 17:03:00

.Net生命周期对象

2012-06-20 10:29:16

敏捷开发

2009-07-23 18:55:17

ASP.NET页生命周

2010-01-26 17:00:31

Android生命周期

2019-10-16 10:50:13

Linux内核测试

2009-06-17 15:06:50

Hibernate实体

2013-07-29 05:11:38

iOS开发iOS开发学习类的'生命周期'
点赞
收藏

51CTO技术栈公众号