PHP中的会话控制(二):session
来源:互联网 发布:js复选框取消选中事件 编辑:程序博客网 时间:2024/04/30 11:36
什么是session
session是一种会话控制方式,将来访用户的状态信息存放于服务器之中,让其他程序能通过服务器中的文件或数据库,来存取用户信息。
与cookie的区别
cookie是将用户信息存放在客户端,所以用户有权阻止cookie的使用。
session是将用户信息存放在服务器中,所以用户无法停止session的使用。
session工作原理
session在客户端仅需要保存有服务器为用户创建的一个session标识符,成为Session ID,而在服务器端(文件/数据库/Memcache中)保存session变量的值。
当某个用户向服务器发出请求,服务器首先会检查这个客户端的请求里是否包含Session ID。如果包含,说明之前已经为此用户创建过Session,服务器则按该Session ID把session检索出来使用。否则,为该用户创建一个Session,并生成一个与此session关联的Session ID,在本次响应中被传送给客户端保存。
Session在PHP中的使用
session必须首先启动,在PHP中调用session_start()函数,如下:
session_start(); //创建session,开始一个会话
注册session变量,如下:
session_start();$_SESSION['username'] = "mrhengbing"; //注册session变量,赋值为一个用户的名称$_SESSION['uid'] = 1; //注册session变量,赋值为一个用户的ID
执行该脚本后,两个session变量就会被保存在服务器端的某个文件中。该文件目录由php配置文件php.ini中的session.save_path属性指定。
当使用完一个session变量后,可以将其删除。当完成一个会话后,也可以将其销毁。如下:
unset($_SESSION["username"]); //删除在session中注册的用户名变量;unset($_SESSION["uid"]); //删除在session中注册的用户ID变量;$_SESSION = array(); //将某个用户在session中注册的变量全部清除session_destroy(); //销毁和当前session有关的所有资料
使用“$_SESSION = array()”时,也将这个用户在服务器端对应的session“文件内容”清除。
而使用session_destroy()时,则是将这个用户在服务器端对应的session“文件”删除。
由于PHP默认的session是基于cookie的,所以Session ID被存储在客户端的cookie中,所以也要注意清除Cookie中保存的Session ID。而保存Session ID的cookie的标识名称就是session的名称,可以通过session_name()获取。如此,Session的注销过程共四个步骤,代码如下:
session_start(); //第一步:开启Session $_SESSION = array(); //第二步:删除所有session变量,也可以用unset()逐个删除 //第三步:如果使用基于cookie的session,使用setcookie()删除包含Session ID的cookie if(isset($_COOKIE[session_name()])){ setcookie(session_name(), '', time()-3600, '/'); } session_destroy(); //第四步:彻底销毁session
session的垃圾回收机制
上面的脚本是通过在页面提供一个“退出”按钮,单击销毁本次会话。但是如果用户没有点击“退出”,而是直接关掉浏览器,或者断网等情况,在服务器端保存的session文件是不会被删除的。
虽然下次需要分配一个新的Session ID重新登录,但这只是因为在php.ini中设置的session.cookie_lifetime=0,设定了Session ID在客户端cookie中的有效期。值为0表示“直到关闭浏览器”。
所以没有被Session ID引用的服务器端原来Session文件的就成了“垃圾文件”,对于这些永远也用不上的“垃圾文件”,系统有自动清理机制。
通过在php.ini中设置session.gc_maxlifetime的值(单位为秒),“垃圾回收程序”就会在所有session文件中排查,如果有修改时候距离当前时间超过该值的就删除。
“垃圾回收程序”是在调用session_start()时启动的。启动的概率由php.ini中的两个属性比率决定,即“session.gc_probability/session.gc_divisor”。值得注意的是,对话页面访问越频繁,概率就应当越小。
以上。
关于PHP中session的使用,更多的方法参考PHP手册:PHP:session
- PHP中的会话控制(二):session
- php会话控制(session与cookie)
- PHP 会话控制(session与cookie)
- php之session会话控制
- php会话控制(session&cookie)
- php session 会话控制[转]
- php会话控制[3]-SESSION
- PHP中的会话控制(一):cookie
- PHP中的会话控制(1)
- PHP中的会话控制(2)
- PHP中使用会话控制(cookie & session)
- PHP中的基本会话控制
- PHP会话控制之session--实例
- PHP会话控制之Session介绍原理
- php会话控制-session [个人笔记]
- PHP 会话控制Cookie和Session
- PHP会话控制Session与Cookie
- PHP会话控制Session与Cookie
- STM32 HAL库详解 及 手动移植
- [ Godot Engine ]
- Learnjava--色子点数概率(转)
- nlp文本处理开源工具,及聊天机器人实现
- ghttp作为客户端下载大文件的问题
- PHP中的会话控制(二):session
- C++ 虚函数表解析
- 简单使用Ajax实现异步查询用户名是否被占用
- Shiro中自定义Realm的作用(FormAuthenticationFilter和PermissionAuthorizationFilter)以及源码解析
- Visual Studio控制台程序输出窗口一闪而过的解决方法
- ssm整合原来的版本
- android 实现拉出回弹效果通过自定义ListView重写overScrollBy()
- [BZOJ3510][启发式合并][LCT维护子树信息]首都
- 06 无线通信概念