1. 为什么需要Cookie?
HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,数据传输完成后,连接就会关闭。再次交互数据需要建立新的连接,因此,服务器无法从连接上跟踪会话,也无法知道用户上一次做了什么。这严重阻碍了基于Web应用程序的交互,也影响用户的交互体验。如:在网络有时候需要用户登录才进一步操作,用户输入用户名密码登录后,浏览了几个页面,由于HTTP的无状态性,服务器并不知道用户有没有登录。
Cookie是解决HTTP无状态性的有效手段,服务器可以设置或读取Cookie中所包含的信息。当用户登录后,服务器会发送包含登录凭据的Cookie到用户浏览器客户端,而浏览器对该Cookie进行某种形式的存储(内存或硬盘)。用户再次访问该网站时,浏览器会发送该Cookie(Cookie未到期时)到服务器,服务器对该凭据进行验证,合法时使用户不必输入用户名和密码就可以直接登录。
本质上讲,Cookie是一段文本信息。客户端请求服务器时,如果服务器需要记录用户状态,就在响应用户请求时发送一段Cookie信息。客户端浏览器保存该Cookie信息,当用户再次访问该网站时,浏览器会把Cookie做为请求信息的一部分提交给服务器。服务器检查Cookie内容,以此来判断用户状态,服务器还会对Cookie信息进行维护,必要时会对Cookie内容进行修改。
2. Cookie的类型
Cookie总时由用户客户端进行保存的(一般是浏览器),按其存储位置可分 为:内存式Cookie和硬盘式Cookie。
内存式Cookie存储在内存中,浏览器关闭后就会消失,由于其存储时间较短, 因此也被称为非持久Cookie或会话Cookie。
硬盘式Cookie保存在硬盘中,其不会随浏览器的关闭而消失,除非用户手工 清理或到了过期时间。由于硬盘式Cookie存储时间是长期的,因此也被称为 持久Cookie。
3. Cookie的实现原理
Cookie定义了一些HTTP请求头和HTTP响应头,通过这些HTTP头信息使服 务器可以与客户进行状态交互。
客户端请求服务器后,如果服务器需要记录用户状态,服务器会在响应信息 中包含一个Set-Cookie的响应头,客户端会根据这个响应头存储Cookie信息。
再次请求服务器时,客户端会在请求信息中包含一个Cookie请求头,而服务 器会根据这个请求头进行用户身份、状态等较验。
Session详解
1)Session的由来以及介绍
Session:在计算机中,尤其是在网络应用中,称为“会话控制”,生存时间为用 户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就 是用户浏览这个网站所花费的时间。
由于Http是一种无状态的的协议,只负责请求服务器,当它在服务器相应之 后,就与浏览器失去了联系。不能保存用户的个人信息、
(2)Session的机制
session机制采用的是在服务器端保持状态的方案,并且有自己对应的唯一标 识session_id,区分不同用户之前的信息
就比如:我们去一家餐厅吃饭,我们有一张会员卡,上面有我的个人信息, 以及有效时间,当我每次来的时候餐厅都能找到我的个人信息
(3)session的工作原理
1>当一个session第一次被启用时,一个唯一的标识session_id被存储于本地 的cookie中。
2>首先使用session_start()函数,PHP从session仓库中加载已经存储的session 变量。
3>当执行PHP脚本时,通过使用session_register()函数注册session变量。
4>当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一 定路径下的session库中,这个路径可以通过php.ini文件中的 session.save_path指定,下次浏览网页时可以加载使用。
(4)Session项目实战中都有哪些应用
1>记录用户登陆信息,全局使用
2>制作验证码,验证对比操作
3>将session保存到数据库可以实现:a.控制一个帐号只能一个人登录
(5)Session的优缺点
1>session的优点:唯一性、方便调用、不会过多占用资源,是存储在服 务器的一组临时数据。一般情况下,我们在做用户登录时,会将用 户数据存入session。这样,在任何页面都可以方便调用,而且 每个 客户端会产生唯一的session_id,不会混肴。并且在关闭浏览器后, 服务器会有session回收机制,自动删除过期session
2>session的缺点:在客户端是以cookie方式保存的,禁用cookie就没用了。
cookie 和session 的区别
安全性:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
session相对安全些。
占用空间:
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
数据类型
5、cookie只能存储 int float string。Session还可以存储 数组、对象
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
/*session cookie 区别:
1.session安全 cookie不安全
1 session是存储在服务器端 cookie存储在客户端
session存储的机制:
为每个访问者生成一个唯一的session id 这个sessionid 存储在cookie里
$_COOKIE['PHPSESSID']='sc9hd5d5s2moei96njap8409v0'
当用户再次请求服务器的时候 通过cookie把sessionID 传到服务器端 (http请求头)
服务器根据sessionID进行查找session文件 sess_sc9hd5d5s2moei96njap8409v0
我们设置的session变量就存储在了这个session文件中
怎么查看session文件的存储位置?
在php.ini session.save_path=文件路径
如果cookie禁用session还能用吗?
能用!!!
只需要把客户端里的cookie里的sessionID通过其他方式传到服务器端就可以使用了
11.1.1 理解会话控制的概念
会话指的是客户端和浏览器之间的交互过程,控制可以理解为客户端在和浏览器时间进行交互的时候进行的控制。
http协议是一个超文本无状态协议,没有一种内建机制来维护客户端和浏览器之间的对话,所以使用会话控制来解决这一问题。
11.2.1 熟练掌握cookie的使用
Cookie的概念:cookie是一种存储在客户端浏览器里用来跟踪和识别用户上 网信息的机制。简单的来说,cookie就是web服务器暂时存储在用户硬盘上的一 个文本文件,并随后被web浏览器读取。当用户再次访问该web网站的时候,网 站通过读取cookie文件记录这位访客的特定信息(如上次访问的位置、花费的时 间、用户名和密码等)从而做出迅速响应。
Cookie 的功能:记录访客的某些信息(例如用户名、三天免登陆),在多页面 之间传递变量,将所有查看的Internet页存储在cookie 的临时文件夹里,可以提高 浏览的速度。
Cookie的使用步骤:
1)设置cookie:setcookie(‘cookie的名字’,’cookie的值’,过期时间)
2)读取cookie:$_COOKIE[‘cookie的名字’]
3)删除cookie:
setcookie(“要删除的cookie的名字”,””,time()-1)
浏览器手动删除
Cookie的分类:分为会话cookie和持久cookie,会话cookie就是没有给cookie设置过期时间,当关闭浏览器或者关闭电脑cookie就会自动消失;持久cookie就是给cookie设置了过期时间,只要过期时间没到,关闭浏览器和关闭电脑cookie都不会消失,只有过期时间到了才会消失。
11.3.1 深入理解session原理
Session的定义:session是一种存储服务器端用来跟踪和识别用户信息的会话机制。当启动一个session会话时,会生成一个随机且唯一的session_id,也就是session文件名,此时,session_id存储在本地的cookie里。当关闭页面时此id会自动注销,重新登录此页面,会再次生成一个随机的id。
11.3.2 熟练掌握session的使用
使用步骤:
1)开启session:session_start(); 此函数前面不能有任何输出
2)给session赋值:$_SESSION[‘名’]=值
3)使用session:$变量名=$_SESSION[‘名’]
4)删除session:
删除单个session:unset($_SESSION[‘名’])
删除多个session:$_SESSON=array();
结束当前所有session:session_destroy()
11.3.3 深入理解session和cookie的区别
区别:session存储在服务器端,cookie存储在客户端,session相对于安全,cookie不安全,session和cookie都可以设置过期时间,都可以跨页面传值,都可以实现会话功能。Session开启后,有一个sessionid存储在cookie里,如果客户端禁止了cookie,sessionid以url地址栏的方式进行传输。
11.4.1 灵活运用session或cookie实现用户登录的会话控制
Cookie实现登陆控制:setcookie(“名”,”值”,”过期时间”),设置完成后,在每一个登陆后才能访问的页面加入:if(empty($_COOKIE[‘名’])){ die(“未登录,不能操作!”)},如果用户选择了七天免登陆,在登陆界面加入:
if(!empty($_COOKIE[‘名’])){ header(“跳转”)}
Session实现登陆控制:session_set_cookie_params(1*60);session_start(); $_SESSION[‘名’]=值;,设置完成后,在每一个登陆后才能访问的页面加入:if(empty($_SESSION[‘名’])){ die(“未登录,不能操作!”)},如果用户选择了七天免登陆,在登陆界面加入:if(!empty($_SESSION[‘名’])){ header(“跳转”)}
15.2 cookie技术
为什么要使用会话控制?
答:http协议时无状态协议,就是说http协议没有一个内建机制,来维护两个事物之间的状态
什么是cookie?
答:cookie是存储在客户端的浏览器中用来跟踪和识别用户的会话控制,可以实现多页面传值。存储地址为:C:\Documents and Settings\Administrator.ZOURINET\Cookies
cookie的分类有那些?
答:持久cookie:被设置失效时间的cookie称为持久cookie。不论浏览器是否关闭,cookie里面的值一直会等到失效时间到了,才会消失
会话cookie:没有被设置失效时间的cookie称为会话cookie。当浏览器关闭后或者重启电脑后cookie就会消失
cookie的使用步骤是什么?
① 设置cookie
setcookie(string $name,[string $value],[ int $expire ])
注意:setcookie前面不能有输出
setcookie("名",“值”,“失效时间”)《注意:失效时间一定是秒数》
② 使用cookie
用$_COOKIE["名"]来读取cookie,把$_COOKIE当成一个普通的数组就可以
③ 删除cookie
手动删除:
通过浏览器进行删除
代码删除:
setcookie("名",“”,time()-1);
session的运行机制:
为每个访问者创建一个唯一的sessionid sessionid存储在客户端的的cookie里面
当用户在此请求的时候 通过http请求头(cooike)将session id传到服务器 服务器根据sessionid
找到与之相对应的session 文件并取出其中的变量