Home > Article > Backend Development > PHP SESSION 机制
原文来自
PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。当你在浏览器访问一个网站的时候,网站的后台为你打开了一个回话,这个回话就是session。它可以存储你的一些重要的信息。它会分配给你一个ID,你何时启动它了,何时关闭它了。通过服务器上存储的信息,方便随后使用。它有这么多的好处强项。但是……当你关闭了这个网页。一切都回到了解放前,它忘记了你。唯有存储到数据库中,才能真正的做到它日后都记得你。session的工作机制是:每一个访问者都有一个唯一的ID,并且基于UID来存储信息到服务器。UID存储在cookie中,通过URL可以传导。有了这个唯一的ID,你在当前访问的网页中随处跳转它还是能够记住你的ID,从而实现给你提供你存储在服务器的准确信息(如:用户名,购物车等)。
使用session首先要确定你的服务器是否支持session。你可以通过 phpinfo() 查看PHP配置信息。找到看你的配置信息中是否存在session 模块上面的session_support 值为 enable 的则说明你能正常的使用session了。如果没有session这个模块你必须先去php.ini启用session 组件。另外。php.ini 中session.save_handle = files,才能正常的使用session。
session_start()
session_start() 函数必须位于 标签之前,在session_start()前不允许有输出。session_start()是session机制的开始。开始之后,session会开启垃圾回收机制,因为session是存放文件当中的,则不可能不回收,否则占用太多会导致一系列的系统问题。而PHP本身的垃圾回收机制对session来说是无效的,session的回收是指删除存储的文件。session回收的概率在php.ini中有定义。session.gc_probability系统默认的是1,但是有些系统的session.gc_probability值是0,这也就是说回收的概率是0,这时系统会通过cron脚本来实现垃圾回收机制。另外,session配置项中有session.gc_maxlifetime 这么一项,这时配置session过期时长的,默认是1440,24分钟。这个不建议设置的太小,因为session回收需要根据它。session开启之后,便可以为session赋值。服务器会存储session变量。存储和取回session 变量的正确方式是使用 $_SESSION 变量。
<?php$_SESSION['key'] = 'value';?>
新添加的key值,这个值则会存储在内存当中,当脚本执行完毕后,session就会被存储到指定的session_id 文件。如果已经存在,则可能需要创建新的文件。在php.ini设定的回收时间内会销毁session_id的文件。
读取session 方式如下:
<?php$_SESSION['key'];?>
session关键字$_SESSION['键值'];
<?phpunset($_SESSION['key']); //销毁某个指定键值unset($_SESSION) //销毁整个session?>
删除某些 session 数据,除了可以使用 unset() ,还可以使用 session_destroy() 函数。
利用session实现用户登录和注销session的特性之一是安全,所以用它来实现登录将会是一个很好的方案。整个登录的流程大概如下。用户进入登录页面===>>输入正确的用户账户密码===>>服务器端脚本验证成功后,开启一个session回话,存储用户ID($_SESSION['uid'])和用户名($_SESSION['user_name'])===>>跳转它网站中的其他页面,利用($_SESSION['user_name'])显示用户姓名,必要时可以通过$_SESSION['u_id']等到用户ID===>>用户退出登录( unset($_SESSION) )登录页面中包含以下代码:
<?phpsession_start();//开启session$_SESSION['user_name'] = $_POST['user_name'];?><html>登录表单</html>
登录成功跳转之后。在其他的页面,如选购商品、生成交易订单等页面,需要用到用户信息的页面可以使用以下方式获得用户信息
<?phpsession_start(); //首先需要开启session//读取用户信息$user_name = $_SESSION['user_name'];//根据用户名查询到这个用户的信息?>
之后如果用户直接退出了浏览器,或者关闭了网站。session在指定的回收时间内,session将会自动注销回收。若是用户想要手动退出呢,可以:
<?phpsession_start();unset($_SESSION);//注销所有session?>
这样便是一个基本的用户登录注销系统流程。其中还有很多地方可以做安全处理的。这里将不一一道来。原文来自