SESSION与COOKIE

来源:互联网 发布:java投票系统源码 编辑:程序博客网 时间:2024/06/07 05:07

前面学习时,服务器一直在自己的电脑上,而客服端的浏览器也是自己用的浏览器,为了更方便自己理解。所以将会话控制的知识总结一下。
作者:罗正波 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的当前目录。        但是加上它会兼容更多的浏览器。如果该参数设为www.example.com,就只在www子域名内有效        如果设定此值则代表只有某种情况下,        才能在客服端与浏览器端之间传递。当设定为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()可以修改php.ini中session.auto_start=1。    c、当你第一次访问网站时,session_start()函数就会创建一个唯一的SessionID,并自动通过HTTP的响应头讲这个SessionID保存在客户端Cookie中,    当同一个用户再次访问这个网站的时,    这是session_start()函数就不会在去分配一个SessionID,而是在服务器的硬盘中去寻找和这个SessionID同名的Session文件,    将之前的为这个用户保存的会话信息独处,在当前脚本中应用,达到跟踪的目的。Session注销变量与销毁    a、session_destroy()    因为$_SESSION数组和自定义的数组在使用上是相同的,所以我们用unset()函数来释放在session中注册的单个变量        unset($_SESSION['username']);        unset($_SESSION['password']);        注意不要使用unset($_SESSION)删除整个$_SESSION数组,        这样将不能在通过$_SESSION超全局数组注册变量了,但是如果想把某个用户在Session中注册的所有变量都删除,        可以直接使用将数组变量$_SESSION赋上一个空数组。        $_SESSION = array();    b、PHP默认的Session是基于Cookie的,SessionID被服务器存储在客服端的Cookie中,    在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();  
0 0
原创粉丝点击