当前位置:  编程技术>php

PHP Session机制简介及用法

    来源: 互联网  发布时间:2014-08-26

    本文导语:  当服务器创建了一个session(session_start()),服务器将会在服务器的指定文件夹下创建一个session文件,其名称为sessionID,并当做cookie的值发送给浏览器。浏览器每次访问该服务器时便会带着这个cookie,服务器便会识别改sessionID...

当服务器创建了一个session(session_start()),服务器将会在服务器的指定文件夹下创建一个session文件,其名称为sessionID,并当做cookie的值发送给浏览器。浏览器每次访问该服务器时便会带着这个cookie,服务器便会识别改sessionID,找到相应的session文件。该文件中存放了若干键值对。该session文件所存放的文件夹可以在配置文件php,ini中修改。

cookie 每次请求页面的时候进行验证,如果用户信息存储在数据库中,每次都要执行一次数据库查询,给数据库造成多余的负担。cookie可以被修改的,所以安全系数太低。

session是存储在服务器端面的会话,相对安全,并且不像Cookie那样有存储长度限制。由于Session是以文本文件形式存储在服务器端的,所以不怕客户端修改Session内容。实际上在服务器端的Session文件,PHP自动修改session文件的权限,只保留了系统读和写权限,而且不能通过ftp修改,所以安全得多。

对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证。

如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能 只做一次验证。为什么呢?

因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的时候表示未登录,在第一次通过验证后将 $admin 等于 true 存储在 Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么?非常的不安全。

而 Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改 Session 文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。

而且可以减少每次为了验证 Cookie 而传递密码的不安全性了(Session 验证只需要传递一次,假如你没有使用 SSL 安全协议的话)。即使密码进行了 md5 加密,也是很容易被截获的。

session 会话会为每一个开启了 session 会话的访问者建立一个唯一的会话 ID ,用于识别用户。该会话 ID 可能存储于用户电脑的 cookie 内,也可能通过 URL 来传递。而对应的具体 session 值会存储于服务器端,这也是与 cookie 的主要区别,并且安全性相对较高。

创建 session

要创建 session 或返回已经存在的会话 ,就必须先使用 session_start() 函数开启一个 session 会话,系统会分配一个会话 ID:



注册session变量

使用 session_register() 函数注册一个 session 变量,成功返回 TRUE ,否则返回 FALSE 。

语法:bool session_register( mixed name [, mixed ...] )

使用 session_register() 函数可以在目前会话下注册一个或多个全局 session 变量。 参数name就是想要加入的变量名,成功则返回逻辑值true。可以用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式来取值或赋值。

例子:


在该例子中,我们向 session 注册了一个名为 username 的变量,其值为 nostop 。

读取 session

PHP 内置的 $_SESSION 变量可以很方便的访问设置的 session 变量。

例子:


销毁 session

session_unregister()  注销单个 session 变量
unset($_SESSION['age']); 用于注销以$_SESSION['age']注册的session变量
session_unset()  删除所有已注册的变量
session_destroy() 注销所有的session变量,并注销整个 session 会话

例子:



检查变量是否被登记为会话变量

session_is_registered

语法:boobean session_is_registered(string name);

这个函数可检查当前的session之中是否已有指定的变量注册,参数name就是要检查的变量名。成功则返回逻辑值true。

例子:



存取当前会话名称

session_name

语法:boolean session_name(string [name]);

这个函数可取得或重新设置当前session的名称。若无参数name则表示获取当前session名称,加上参数则表示将session名称设为参数name。

例子:



存取当前会话标识号

session_id

语法:boolean session_id(string [id]);

这个函数可取得或重新设置当前存放session的标识号。若无参数id则表示只获取当前session的标识号,加上参数则表示将session的标识号设成新指定的id。

设置 Session 的生存期

setcookie:向客户端发送一个 HTTP cookie。


session_set_cookie_params:设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用。
如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。

// 保存一天


设置 Session 文件的保存路径

session_save_path() :必须在 session_start() 函数调用之前调用。




    
 
 

您可能感兴趣的文章:

  • PHP的substr() 函数用法
  • php setcookie函数的参数说明及其用法
  • php中检测变量是否是一个对象的is_object函数介绍及用法举例
  • PHP函数microtime()用法与说明
  • php session 原理详解,用法介绍以及如何设置过期时间
  • php析构函数用法举例
  • php时间格式化函数date介绍及用法参考
  • php sprintf函数用法 php浮点数格式
  • PHP随机显示指定文本(if elseif的用法)
  • php析构函数用法分享
  • php goto语句用法简介
  • PHP函数microtime()时间戳的定义与用法
  • php pdo mysql query用法介绍
  • PHP ini_set与ini_get函数用法
  • PHP修改session_id示例代码 iis7站长之家
  • php zip解压缩类pclzip用法举例
  • MySQL和PHP中substr函数用法
  • PHP中ini_set和ini_get函数的用法小结
  • php pdo insert与pdo insertId的用法
  • php浮点数精度用法分析
  • php GD库函数getimagesize()的用法
  • php session机制详解(生成机制、回收机制与存储机制)
  • php中Session的生成机制、回收机制和存储机制探究
  • php反射机制获取php类的所有方法
  • php垃圾回收机制解析
  • 简单的php缓存类分享 php缓存机制
  • php析构函数与垃圾回收机制
  • php中session过期时间设置及session回收机制介绍
  • PHP中copy on write写时复制机制介绍
  • PHP中的插件机制原理和实例
  • php自动加载autoload机制实例分析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php中session_id()函数详细介绍,会话id生成过程及session id长度
  • PHP的Session封装 Zebra_Session
  • php session_id()函数介绍及代码实例
  • PHP的Session管理类 My Session
  • php5中当浏览器禁用cookie时保持会话session的方法
  • PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
  • php会话(session)生命周期概念介绍及设置更改和回收
  • PHP的Session管理框架 patSession
  • php中session退出登陆问题
  • PHP修改session_id示例代码
  • PHP的Session数据存储方案 Scache
  • 一个严格的PHP Session会话超时时间设置方法
  • php将session放入memcached的设置方法
  • PHP Session会话超时时间设置方法教程
  • PHP中Fatal error session_start()错误解决步骤
  • php中session使用示例
  • php session使用方法示例
  • PHP中session变量的销毁
  • PHP中使用memcache存储session的三种配置方法
  • php5.3 不支持 session_register() 此函数已启用怎么办?
  • PHP中Session引起的脚本阻塞问题解决办法
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3