关于session和cookie的关系

 

session的由来

首先我们用浏览器打开一个网页用到的是HTTP协议,是无状态的(就是这一次的请求和上一次的请求是没有任何关系的)这时候,如果两个页面都要用到登陆状态的话,每次都去查数据库的话,就会使数据库有很大的压力。

这时候cookie就诞生了,它是把少量的信息存储在用户自己的电脑上,它在一个域名下使一个全局的,只要设置它的存储路径在域名www.a.com下,那么当用户用浏览器访问的时候,就可以任意读取cookie中的信息的。但是,由于是存储在客户端,所以用户可以看到,并且还可以随意修改,这样岂不是很不安全。

于是session就诞生了,session让两个页面都能读取到这个全局的session信息。session信息存在于服务器端,所以也就很好的解决了安全问题。

运行机制

好,现在来说一下session的运行机制:我们主要用PHP中的session的机制,其实各种语言差不多。第一步,我们要先开启session,session_start(),这是个无任何值的函数,既不会报错,也不会成功,它的作用就是开启session,并且会随机生成一个32为的session_id(就是为了标识唯一的用户),同时也会向cookie中传一个名字为PHPSESSION的变量,也就是session_id。

当我们浏览器的时候,如果用到开启session,就会去读cookie中的PHPSESSID是否有,如果没有的话就会重新生成一个session_id,先存入cookie中的PHPSESSID中,在生成一个sess_前缀文件

一般的应用场景:

1、登录时需要校验用户输入的用户名和密码,如果都正确,那么我们会将用户的信息存储到Session中。

 在需要登录以后才能访问的页面中校验Session,如果Session有值,说明用户登录了,继续访问页面,如果没有值,说明用户没有登陆,那么跳转到登陆页面。

 

2、由于session是存到服务器的,所以尽量不要存一些过大的数据。session的默认过期时间是20分钟,但该过期时间为滑动过期时间(就是你第19分钟来访问,它会在往后延20分钟)

3、在一般处理程序中如果要使用session必须实现.IrequiresSessionState接口。(起到标记作用)

4、使用session一定要线判断为不为空,比较完session之后一定要清空session(一是节省空间,还有就是安全)

再说一下cookie机制

对于cookie客户端状态保持机制,网站的数据是存在客户端,与隐藏域与viewstate对象都属于这种客户端状态保持,cookie中存储的是关于网站相关的文本字符串数据,cookie的存储方式有两种,如果不指定过期时间,那么存储再客户端浏览器内存中;如果指定了过期时间,那么存储再客户端的磁盘上,cookie是与具体的网站有关的,如果我们将cookie设置了过期时间,那么当用户指定时间内访问我们的网站,那么属于我们的网站的cookie数据会放在请求报文中发送过来,其他网站的cookie不会发送。

 创建cookie的两种方法:

一、 
Respons.Cookies["cp4"].value="laowang";
Response.Cookies["cp4"].Expires=DateTime.Now.AddDays(3);
二、  
HttpCookie cookie=new HttpCookie("cp4","laowang");
Cookie.Expires=DateTime.Now.AddDays(3);
Response.Cookies.Add(cookie);

有时用户打开浏览器后需要接收cookie的值,但是由于用户可以将其浏览器设置为拒绝接收cookie,所以我们需要先编写cookie,然后再尝试读该cookie,如果无法读取则提示用户开启 。

 

cookie和session的区别

通过前面介绍的session共享,我们了解到cookie数据存放在客户的浏览器上,而session数据放在服务器上。所以cookie不是很安全,而session就可以保证数据的安全性。我们知道session会在一定时间内保存在服务器上,但是当访问增多时会比较影响服务器的性能,这时我们可以考虑用cookie。综合考虑,一些重要的信息放在session中,而其他信息如果需要保留可以放在cookie中。

session的相关配置

[Session]

 session.save_handler = files --表示的是session的存储方式,默认的是files文件的方式保存,还可以用memcache和redis来保存。

 session.save_path = "d:/wamp/tmp"

 session.use_cookies = 1 --默认为1,表示会在浏览器里创建值为PHPSESSID的session_id,session.name=PHPSESSID这个配置就是改这个名字的。

 session.name = PHPSESSID

 session.auto_start = 0

 session.cookie_lifetime = 0 --设置session信息保存的时长

 session.serialize_handler = php

 session.gc_divisor = 1000

 session.gc_probability = 1

 session.gc_maxlifetime = 1440 --这个和上面两个配合使用,是回收sess_xxx的文件

初出茅庐,还望大佬指教!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值