php会话控制区别和流程,PHP快速入门之会话控制

11.1案例介绍

登录

a8704f047393

11.2分析案例

用户登录时为避免每一个链接都验证用户信息,所以使用会话控制技术,来记录用户的登录状态

11.3核心知识

会话控制概述、cookie工作原理及使用方法、session工作原理及使用方法

11.4知识讲解

11.4.1会话控制概述

当静态网站发展到动态网站时,我们需要面对维护某种状态,逐渐的出现了会话控制。

http是一个无状态的协议,此协议无法来维护两个事务之间的联系。

如何理解HTTP协议本身是无状态的?

我们上网都要靠HTTP协议传递信息。比如我们在浏览器里键入:http://www.bokee.com/这个网址并回车,你会发现网址会变成:http://www.bokee.com/,其原因就是浏览的网页是基于http协议的。http协议无法记录用户经常上哪些网站,有什么爱好,也无法记录用户的ID帐号和密码。这就是所谓的HTTP协议无状态。HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样,你认得它们,它们则肯定认不得你。

当一个用户在请求一个页面后在请求另外一个页面时,http将无法告诉我们这两个请求是来自同一个变量。

会话控制思想就是能够在网站中跟踪一个变量,我们可以跟踪变量,就可以做到对用户的支持,并根据授权和用户身份显示不同内容,不同页面。

Cookie和 session有什么用?

常见的用法,比如在有些网站下载东西需要会员先登陆。http协议本身是无状态的,无法得知顾客是否已经登陆,怎么办呢?cookie和session就可以知道。再比如网上购物,购物车怎么知道顾客挑选过哪些商品呢?cookie和session也可以记录。总而言之,cookie和session就是能够记录顾客状态的技术,尽管二者属于不同的技术,但只要cookie能做到的,session也能做到!

11.4.2基本会话功能

php的会话是通过会话ID来实现, 用户在每次登陆的过程中,得到会话ID是唯一的,它可以保存在用户的机器里,或者通过URL在网络上传输。

会话ID像一把钥匙,他允许我们注册特定的变量,我们称为会话变量。

这些变量的内容保存在服务器端,而会话ID就是客户端唯一可见的信息,如果在网络连接中,客户端通过COOKIE或URL确定了会话的ID,那么就可以访问,会话保存在服务器上的会话变量。

11.4.3 Cookie和Session在php中的使用

cookie和session都可以暂时保存在多个页面中使用的变量。但是它们有本质的差别。

cookie存放在客户端浏览器中,session保存在服务器上。它们之间的联系是session ID 一般保存在cookie中.

在WEB技术发展史上,Cookie技术的出现是一个重大的变革。

最先是Netscape在它的Netscape Navigator浏览器中引入了Cookie 技术,从那时起,World Wide Web 协会就开始支持Cookie标准。以后又经过微软的大力推广,即在微软的 Internet Explorer 浏览器中完全支持Cookie技术。到现在,绝大多数的浏览器都支持Cookie技术,或者至少兼容Cookie技术的使用。

11.4.4 Cookie

1. 什么是Cookie?

cookie是在http协议下,服务器或脚本可以维护客户端信息的一种方式。

cookie是web服务器保存在用户浏览器上的小甜饼(文件),她可以包含有关用户的信息。当用户访问服务器时,服务器可以访问到cookie的信息

如果浏览器上Cookie太多,超过了系统所允许的范围,浏览器将自动对它进行删除。

2. Cookie工作原理

当客户访问某个基于PHP技术的网站时,在PHP中可以使用setcookie函数生成一个cookie,系统经处理把这个cookie发送到客户端并保存在C:\Documents and Settings\用户名\Cookies目录下。cookie是 HTTP标头的一部分, 因此setcookie函数必须在任何内容送到浏览器之前调用。这种限制与header()函数一样(如需了解head()函数,请自行查阅)。当客户再次访问该网站时,浏览器会自动把C:\Documents and Settings\用户名\Cookies目录下与该站点对应的cookie发送到服务器,服务器则把从客户端传来的cookie将自动地转化成一个PHP变量。在PHP5中,客户端发来的cookie将被转换成全局变量。你可以通过$_COOKIE[‘xxx’]读取。

3. 设置Cookie

PHP用setcookie函数来设置Cookie。Cookie 在传输过程中,是HTTP 协议头的一部分,用于浏览器和服务器之间传递信息,所以必须在任何属于HTML文件本身的内容输出之前调用SetCookie函数,调用该函数前即使有空格、空白行都不行

setcookie函数定义了一个cookie并且把它附加在http头中:

int setcookie(string name,[string value,[int expire,[string path,[string domain,[int secure]]]]]);

常用参数解释:

name参数是设置cookie的名字.

value设定了cookie的值.

expire参数是一个标准的Unix时间标记,可以用time()函数取得,以秒为单位:

可选参数path, domain,secure

path :服务器端的有效路径

domain :设定有效域名

secure :设置是否仅在https安全连接时才设定

注意:

如果网站有几个不同的文件目录,使用不带路径的cookie,那么在一个页面里设置的cookie在另一个页面里会看不到.如果没有指定路径,web服务器自动把设置时的路径作为指定的路径。

解决办法:设定路径和域名比如: www.php.net

实例:$value="the best way is by yourself";

setcookie("cookiename",$value,time()+60*60*24*7);

接收和处理cookie

PHP对cookie有很好的支持,和form表单一样,在接收的时候PHP会自动从web服务器接收HTTP头并且分析它。接收的时候和表单接收一样,用联COOKIE[ ]或者$_HTTP_COOKIE_VARS[ ]接收。

cookie的生命周期到了,cookie就会失效

设置一个cookie时失效时间为time( )那么在页面浏览完之后就被删除

4. 使用Cookie的限制

首先:在html文件的内容输出前设置:

不同的浏览器版本,浏览器型号对cookie的处理不同

客户端可以禁用cookie,浏览器也会限制cookie的数量

5. 创建Cookie数组

其一:SetCookie("CookieArray[]", "Value 1"); SetCookie("CookieArray[]", "Value 2");其二:SetCookie("CookieArray[0]", "Value 1"); SetCookie("CookieArray[1]", "Value 2");

setcookie()中使用数组的例子:

<?php      setcookie("cookie[three]", "cookiethree");     setcookie("cookie[two]", "cookietwo");     setcookie("cookie[one]", "cookieone");//刷新页面后,显示出来     if (isset($_COOKIE['cookie'])) {          foreach ($_COOKIE['cookie'] as $name => $value) {               echo "$name : $value
\n";}     } //help from php_help?>

6. 删除Cookie

要删除一个已经存在的Cookie,有两个办法: 1、调用只带有name参数的SetCookie,那么名为这个name的Cookie将被从关系户机上删掉;setcookie(“MyCookie”); //删除MyCookie。

2、设置Cookie的失效时间为time()或time()-1//time()减多少没有关系啦,只要是过期时间就行//,那么这个Cookie在这个页面的浏览完之后就被删除了(其实是失效了)。

例如:setcookie(“MyCookie”,”Value”,time()-1); //删除MyCookie。要注意的是,当一个Cookie被删除时,它的值在当前页在仍然有效的。如果要把cookie保存为浏览器进程,即浏览器关闭后就失效。那么可以直接把expiretime设为0。例如:setcookie(“name”,”value”,0)。该参数不设置的话,关闭浏览器也能结束一个cookie。

7. Cookie注意事项

1、SetCookie()之前不能有任何html输出,就是空格,空白行都不行。

2、SetCookie()后,你在当前页调用echo $_COOKIE[“name”]不会有输出。必须刷新或到下一个页面才可以看到Cookie值。

3、使用Cookie的限制。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。

4、Cookie是保存在客户端的,用户禁用了Cookie,你的Cookie自然也就没作用啦!

11.4.5 Session

1.什么是Session?

session在web开发中具有非常重要的份量。它可以将用户正确登录后的信息记录到服务器的内存中,当用户以此身份访问网站的管理后台时,无需再次登录即可得到身份确认。而没有正确登录的用户则不分配session空间,即便输入了管理后台的访问地址也不能看到页面内容。通过session确定了用户对页面的操作权限。

2.Session的原理

当用户向服务器端发送了一个开启了session的url请求,服务器会因为该请求开启了session,而为这次请求随机分配一个sessionid。同时服务器端的指定路径下,会记录该sessionid,以及该用户的登录信息(例如用户名和密码)。同时会将这个sessionid传回发送请求的客户端,而这个sessionid会被保存在客户端一个生命周期为0的cookie中。因此session的正常使用要依赖于cookie的开启。

注:

因为cookie是通过客户端浏览器来保存的,在ie浏览器中,如果浏览器的隐私设置为阻止所有cookie,那么cookie则被禁用,而session也不能正常使用。如果想让session正常发挥作用,浏览器隐私需要设置为高或者以下。

3.Session的使用步骤

1). 启动session:使用session_start()函数来启动。

2). 注册会话:直接给$_SESSION数组添加元素即可。

3). 使用会话:判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。

4). 删除会话:

A. 可以使用unset删除单个session;

B. 使用$_SESSION=array()的方式,一次注销所有的会话变量;

C. 使用session_destroy()函数来彻底销毁session。

4.对删除会话的三种方式比较

A. unset可以将session值从session文件中清除,但是该session文件依然存在;在同一个页面,unset一个session值后,立刻输出该session值,无法获得内容。

B. $_SESSION=array()的方式也是将session值从session文件中清除,但是该session文件依然存在;在同一个页面,通过$_SESSION=array()删除所有session后,立刻输出session值,无法获得内容。

C. session_destroy()可以将session的保存文件进行删除。在同一个页面,session_destroy()销毁session后,立刻输出该session值,还依然可以输出session的内容,当刷新后则无法获得内容。

因此,为了彻底清除session,一般先$_SESSION=array(),然后再session_destroy()。

5.Session的综合应用

当用户登录成功后,必须应用Session技术来跟踪登录信息。此外需要同时将验证码图片生成进行复习。因为验证码图片生成过程中利用到了Session技术的跨页面传值的特性。

11.4.6Session和Cookie的区别

cookie是保存在客户端机器的,对于未设置过期时间的cookie,cookie值会保存在机器的内存中,只要关闭浏览器则cookie自动消失。如果设置了cookie的过期时间,那么浏览器会把cookie以文本文件的形式保存到硬盘中,当再次打开浏览器时cookie值依然有效。

session是把用户需要存储的信息保存在服务器端。每个用户的session信息就像是键值对一样存储在服务器端,其中的键就是sessionid,而值就是用户需要存储信息。服务器就是通过sessionid来区分存储的session信息是哪个用户的。

Session和Cookie两者最大的区别就是session存储在服务器端,而cookie是在客户端。session安全性更高,而cookie安全性弱。

11.5知识运用

根据本讲单元讲述的内容,做出一个标准的用户注册登录的模块。包括标准的注册表单书写、表单信息入库。当注册成功后,可以通过登录界面进入到会员管理中心。如果是首次注册成功,那么默认同时让该用户进入会员中心。因为这个涉及到我们下个月所学内容,所以本单元侧重于用户登录模块,而登录成功后只需要先应用session技术,然后进入到一个模拟会员中心的页面即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值