Heim >Backend-Entwicklung >PHP-Tutorial >PHP SESSION 机制

PHP SESSION 机制

WBOY
WBOYOriginal
2016-06-20 12:35:51993Durchsuche

原文来自



PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。当你在浏览器访问一个网站的时候,网站的后台为你打开了一个回话,这个回话就是session。它可以存储你的一些重要的信息。它会分配给你一个ID,你何时启动它了,何时关闭它了。通过服务器上存储的信息,方便随后使用。它有这么多的好处强项。但是……当你关闭了这个网页。一切都回到了解放前,它忘记了你。唯有存储到数据库中,才能真正的做到它日后都记得你。session的工作机制是:每一个访问者都有一个唯一的ID,并且基于UID来存储信息到服务器。UID存储在cookie中,通过URL可以传导。有了这个唯一的ID,你在当前访问的网页中随处跳转它还是能够记住你的ID,从而实现给你提供你存储在服务器的准确信息(如:用户名,购物车等)。

使用session

使用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 变量。

存储Session

<?php$_SESSION['key']  = 'value';?>

新添加的key值,这个值则会存储在内存当中,当脚本执行完毕后,session就会被存储到指定的session_id 文件。如果已经存在,则可能需要创建新的文件。在php.ini设定的回收时间内会销毁session_id的文件。

读取Session

读取session 方式如下:

<?php$_SESSION['key'];?>

session关键字$_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?>

这样便是一个基本的用户登录注销系统流程。其中还有很多地方可以做安全处理的。这里将不一一道来。原文来自

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn