SESSION与COOKIE

3/8/2017来源:ASP.NET技巧人气:4773

前面学习时,服务器一直在自己的电脑上,而客服端的浏览器也是自己用的浏览器,为了更方便自己理解。所以将会话控制的知识总结一下。 作者:罗正波 2017/3/5 13:55:40

会话控制

定义:会话控制是一种面向连续的可靠的通信方式,通常根据会话控制记录判断用户的登录行为。用户在浏览网页时,可能需要访问多个页面来完成一个事务,那么需要在切换页面的时候,服务器能保存用户的登录状态以及用户的数据等。这就是会话控制的思想。 作用:由于http协议是无状态的协议,当用户在请求web服务器中的网页时,需要访问多个页面来完成事务,就需要保存用户的登录状态和用户的一些数据。这样会话控制就是允许服务器跟踪同一个客户端做出连续的请求。 会话控制要解决的问题: HTTP是无状态的协议,所以不能维护两个事物间的状态。但一个用户在请求一个页面以后再请求另一个页面时,需要让服务期知道这是一个用户。 总共有3种数据传递方式。 a、超链接或者header()函数等重定向方式 b、使用Cookie将用户的信息状态,存放在客户端的计算机中。 c、使用session将用户的信息状态,存放在服务器之中。 跟踪方式: a、使用Cookie将用户信息状态,存放在客服端的计算机中。让其他程序能通过存取客服端计算机的Cookie,来存取目前使用者的资料。 b、使用Session将用户的信息状态,存放在服务器中。让其他程序能透过服务器中的文件或者数据库来春去使用者的资料。 COOKIE的理解 a、cookie是在http协议下,服务器或脚本可以维护客户端信息的一种方式。 b、Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上。 c、常用于保存用户名,密码,个性化设置等,但是不安全。 d、当用户访问服务器时,就会带着cookie信息来访问服务器可以设置和访问cookie的信息。可以用$_COOKIE查看信息。 e、cookie保存在客户端,通常是IE或Firefox浏览器的cookie临时文件夹中,可以手动删除。 f、注意:如果浏览器上cookie太多,超过了系统所允许范围,浏览器也会自动对它进行删除。 设置COOKIE 函数: setcookie(string name,[string value , [int exPRie, [ string path, [ string domain, [ int secure ]]]]]);返回值为布尔型。 总共6个参数常用的有3个,必须的参数只有一个就是name。 例子:setcookie("username", "rose", time()+60*60*24*1);//向客户端发送一个Cookie,将变量username值为rose,保存客户端一天的时间 name:Cookie的识别名称;使用$_COOKIE['cookiename']调用名cookie的Cookie; value:Cookie的值,可以为数值或字符串形态,此值保存在客服端,不可用来存储敏感信息;获取值:$_COOKIE['参数名'] expire:Cookie的生存期限,只是一个Unix时间戳,即从Unix纪元开始的秒数;例:time()+60*60*24 将设定的Cookie保存一天后失效,如果未设定Cookie,则会在会话结束后就立即失效。 path:Cookie在服务器端指定的路径,当设定此值时,服务器中只有指定路径下的网页或程序可以存取此Cookie;如果该参数设为'/',Cookie就在整个demain内有效,如果设为'/foo/',该参数就只在domain下的'/foo/'目录及其子目录内有效。默认值为设定的Cookie的当前目录。 domain:指定此Cookie所属服务器的网址名称,预设是建立此Cookie服务器的网址。要使Cookie能在如example.com域名下的所有子域名都有效,该参数应该设为'.example.com'。虽然“.”并不是必须的,但是加上它会兼容更多的浏览器。如果该参数设为www.example.com,就只在www子域名内有效 secure:指明Cookie是否仅通过安全的HTTPS链接传送中的Cookie安全的识别常数,如果设定此值则代表只有某种情况下,才能在客服端与浏览器端之间传递。当设定为TRUE时,Cookie仅在安全连接中被设置,默认值为FALSE。 Set setCookie("username",'username');//保存用户名 setCookie('userpassWord','md5("123")');/保存用户秘密 Delete a、只指定识别名的第一个参数,即删除客户端中这个指定名称的Cookie资料。 setCookie('username');//生存期限同浏览器的关闭则消失。 b、设置Cookie在当前时间之前过期,因此系统会自动自动删除识别名称为username的cookie setCookie('username',time()-1);

SESSION

Session理解与使用 a、Session和Cookie类似,都是用来存储使用者的相关资料。但最大的不同之处在与Cookie是将数据存放于客户端计算机之中,而Session则是将数据存放在服务器系统下。当你打开浏览器的时候访问服务器的时候,就会自动分配一个SessionID,在客服端SessionID会保存在Cookie中,如果用户阻止Cookie的使用,则可以将SessionID保存在用户浏览器地址的URL中,当用户请求Web服务器时,就会包SessionID发送给服务器,在通过SessionID提取保存在服务器Session变量。 b、Session使用的先声明 session_start();//开启session。注意在开启session_start()之前不能有任何的输出内容。如果不想每次都开启session_start()可以修改php.ini中session.auto_start=1。 c、当你第一次访问网站时,session_start()函数就会创建一个唯一的SessionID,并自动通过HTTP的响应头讲这个SessionID保存在客户端Cookie中,同时也在服务器端创建一个以这个SessionID命名的文件用于保存这个用户的会话信息。当同一个用户再次访问这个网站的时,也就会自动通过HTTP的请求头将客服端保存的SessionID在携带过来,这是session_start()函数就不会在去分配一个SessionID,而是在服务器的硬盘中去寻找和这个SessionID同名的Session文件,将之前的为这个用户保存的会话信息独处,在当前脚本中应用,达到跟踪的目的。 Session注销变量与销毁 a、session_destroy() 销毁当前session_start()函数创建的文件,返回值为bool成功为TRUE,失败为FALSE,但是该函数并不会释放和当前session相关的变量,也不会删除保存在客户端的Cookie中SessionID。因为$_SESSION数组和自定义的数组在使用上是相同的,所以我们用unset()函数来释放在session中注册的单个变量 unset($_SESSION['username']); unset($_SESSION['password']); 注意不要使用unset($_SESSION)删除整个$_SESSION数组,这样将不能在通过$_SESSION超全局数组注册变量了,但是如果想把某个用户在Session中注册的所有变量都删除,可以直接使用将数组变量$_SESSION赋上一个空数组。 $_SESSION = array(); b、PHP默认的Session是基于Cookie的,SessionID被服务器存储在客服端的Cookie中,所以在注销前Session时也需要清除Cookie中保存的SessionID,而这就必须借助setCookie()函数完成。在Cookie中,保存SessionID的Cookie标识名称就是Session的名称,这个名称是在php.ini中,通过session.name属性指定的值。在PHP脚本中调用session_name()函数获取Session名称。删除保存在客户端Cookie中的SessionID。 if($_COOKIE[session_name()])setCookie(session_name(),'' ,time()-1,'/'); c、通过以上的介绍可以总结出,Session的注销过程需要4个步骤。完整的4步代码 1、开启session_start(); 2、删除所有的session变量:$_SESSION = array();//服务器端对应文件的内容也会清空 3、如果基于Cookie的session,使用setCookie()删除包含SessionID的cookie: if(isset($_COOKIE[session_name()]))setCookie(session_name(),'',time()-1,'/'); 4、最后彻底销毁Session(服务器端文件也删除) session_destroy();