TOP

前端学PHP之会话Session(一)
2017-10-10 10:52:11 】 浏览:10158
Tags:前端 PHP 会话 Session

前面的话

  Session技术和Cookie相似,都是用来储存使用者的相关资料。但最大的不同之处在于Cookie是将数据存放在客户端的计算机之中,而Session则是将数据存放于服务器系统之下。Session的中文意思是会话,在Web系统中,通常是指用户与Web系统的对话过程。本文将详细介绍Session的内容

 

Session ID

  在Web技术发展史上,虽然Cookie技术的出现是一个重大的变革,但Cookie是在客户端的计算机中保存资料,所以引起了一个争议。用户有权阻止Cookie的使用,使Web服务器无法通过Cookie来跟踪用户信息。而Session技术是将使用者相关的资料存放在服务器的系统之下,所以使用者无法停止Session的使用

  Session在客户端仅需要保存由服务器为用户创建的一个Session标识符,称为Session ID,而在服务器端(文件或数据库或MemCache中)保存Session变量的值。Session ID是一个既不会重复,又不容易被找到规律的,由32位16进制数组成的字符串

  Session ID会保存在客户端的Cookie中,如果用户阻止Cookie的使用,则可以将Session ID保存在用户浏览器地址栏的URL中。当用户请求Web服务器时,就会把Session ID发送给服务器,再通过Session ID提取保存在服务器中的Session变量。可以把Session中保存的变量,当做是这个用户的全局变量,同一个用户对每个脚本的访问都共享这些变量

  当某个用户向Web服务器发出请求时,服务器首先会检查这个客户端的请求里是否已经包含了一个Session ID。如果包含,说明之前已经为此用户创建过Session,服务器则按该Session ID把Session检索出来使用。如果客户端请求不包含Session ID,则为该用户创建一个Session,并且生成一个与此Session相关联的Session ID,在本次响应中被传送给客户端保存

【session_start()】

  用户向Web服务器发出请求时,必须首先使用session_start()函数来启动新会话或者重用现有会话,成功开始会话返回TRUE,反之返回FALSE

bool session_start ([ array $options = [] ] )

  因为基于Cookie的Session是在开启的时候,调用session_start()函数会生成一个唯一的SessionID,需要保存在客户端电脑的Cookie中,和setCookie()函数一样,调用之前不能有任何的输出,空格或空行也不行

  如果已经开启过Session,再次调用Session_start()函数时,不会再创建个新的Session ID。因为当用户再次访问服务器时,该函数会通过从客户端携带过来的Session ID,返回已经存在的Session。所以在会话期间,同一个用户在访问服务器上任何一个页面时,都是使用同一个 Session ID

session_start();

  而且,使用session_start()方法会在服务器端建立一个同名的Session文件(文本文件)

  如果不想在每个脚本都使用Session_start()函数来开启Session,可以在php.ini里设置"session.auto_start=1",则无须每次使用Session之前都要调用session_start()函数。但启用该选项也有一些限制,则不能将对象放入Session中,因为类定义必须在启动Session之前加载。所以不建议使用php.ini中的session.auto_start属性来开启Session

 

读写session

  使用session_start()方法启动session会话后,要通过访问$_SESSION数组来读写session。和$_POST$_GET$_COOKIE类似,$_SESSION也是超全局数组

  使用$_SESSION数组将数据存入同名Session文件中

<?php
session_start();
$_SESSION['username'] = 'huochai';
$_SESSION['age'] = 28;
?>

  同名Session文件可以直接使用文本编辑器打开,该文件的内容结构如下所示:

变量名|类型:长度:值;

<?php
session_start();
print_r ($_SESSION);//Array ( [username] => huochai [age] => 28 )
?>

  Session变量会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在session.save_path属性指定的目录下

 

配置Session

  在PHP配置文件php.ini中,有一组和Session相关的配置选项。通过对一些选项重新设置新值,就可以对Session进行配置,否则使用默认的Session配置

phpinfo();
session.auto_start=0;在请求启动时初始化session
session.cache_expire=180;设置缓存中的会话文档在n分钟后过时
session.cookie_lifetime=0;设置cookie保存时间(s),相当于设置Session过期时间,为0时表示直到浏览器被重启
session.cookie_path=/;cookie的有效路径
session.cookie_domain=;cookie的有效域
session.name=PHPSESSID;用在cookie里的session的名字
session.save_handler=files;用于保存/取回数据的控制方式
session.save_path=/tmp;在save_handler设为文件时传给控制器的参数,这是数据文件将保存的路径.
session.use_cookies=1;是否使用cookies

 

销毁Session

  当使用完一个Session变量后,可以将其删除,当完成一个会话后,也可以将其销毁。如果用户想退出Web系统,就需要提供一个注销的功能,把所有信息在服务器中销毁。销毁和当前Session有关的所有的资料,可以调用session_destroy()函数结束当前的会话,并清空会话中的所有资源

【session_destroy()】

bool session_destroy ( void )    

  session_destroy()销毁当前会话中的全部数据,删除同名Session文件,但是不会重置当前会话所关联的全局变量,也不会重置会话cookie。如果需要再次使用会话变量,必须重新调用session_start()函数

<?php
session_start();
session_destroy();
?>

  可以使用unset()函数来释放在Session中注册的单个变量

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇前端学PHP之会话Session 下一篇PHP soap Web Service 使用SoapDi..