cookie和session

PHP-会话

什么是会话?

用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
会话技术分为cookie和session。

思考?

当你登录某一个网站的时候,你可以在里面每一个网页都可以看到自己的名字,我们可以通过三种技术去实现。
1、数据库 频繁访问数据库问题
2、cookie 网络带宽开销问题/安全性
3、session (较好的选择)session文档存在服务器,较安全且不用频繁访问服务器。

cookie的简介

———Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据。一般情况下,Cookie通过HTTP headers从服务端返回到客户端。多数web进程都支持Cookie的操作,因为Cookie是存在于HTTP的表头中,所以必须在其他信息输出以前进行设置,类似于header函数的使用限制。
———PHP通过setcookie函数进行Cookie的设置,任何从浏览器发回的Cookie,php都会自动的将他存储在$_COOKIE的全局变量之中,因此从我们可以通过$_COOKIE[‘key’]的形式来读取某个Cookie值。
———PHP中的Cookie具有非常广泛的使用,经常用来存储用户的登录信息,购物车等,且在使用会话Session时通常使用Cookie来存储回话id来识别用户,Cookie具备有效期,当有效期结束之后,Cookie会自动的从客户端删除。同时为了进行安全控制,Cookie还可以设置域跟路径。

设置与删除cookie

设置cookie的最常用方法就是setcookie函数,setcookie函数有七个参数,常用参数有五个:

1
2
3
4
5
6
7
name(Cookie名字) 可以通过$_COOKIE['name']进行访问
value(Cookie的值)
expire(过期时间)Unix时间戳格式,默认为0,表示浏览器关闭即失效
path(有效路径)如果路径设置为“/”,则整个网站都有效。只有在极少数特殊情况才会设置路径。
domain(有效域)默认整个域名都有效,如果设置了www.baidu.com,则只在www子域中有效
secure (安全)设置是否Cookie只能通过HTTPS传输,默认值为False
httponly 是否只使用HTTP访问Cookie。默认值是false,如果设置为true,那么客户端js就无法操作这个,用这个参数可以减少xss攻击。

其他设置Cookie的方法有:
setrawcookie函数(与setcookie函数的唯一不同就是value不会自动的进行urlencode)
直接使用header方法进行设置,header(’Set-Cookie:cookie_name=value’);
对于删除cookie,PHP中并没有特定的函数,所以同样采用setcookie(‘name’,’’,time()-1);的方法进行删除。

COOKIE机制

Java中把Cookie封装成了javax.seervlet.http.Cookie类。每一个Cookie都是该Cookie类的对象/服务器通过操作Cookie类对象对客户端Cookie进行操作。通过一些函数进行设置与获取。
查看网站的Cookie很简单,在浏览器地址栏输入 Javascript:alert(document.cookie)但是一般网站都会加密,所以弹出来的是一长串看不懂的字符串。
Cookie使用场景:1、永久登录 2、购物车信息

session与cookie的异同

cookie将数据存储在客户端,建立起用户与服务器之间的来呢西,通常可以解决很多问题,但存在一些局限:1、cookie相对不是很安全,容易被盗用导致cookie欺骗。2、单个的cookie只能存储4k的数据。3、每次请求都要进行网络传输,占用带宽。
session是将用户的会话数据存储在服务端,没有大小限制,通过一个session_id进行用户识别,PHP默认情况下session id是通过cookie来保存的,因此从某种程度上来讲,session依赖于cookie,但这不是绝对的,session id也可以通过参数来实现,只要能将session id传递到服务端进行识别的机制都可以使用session。

session

session的简介

session是 服务器端 技术。

session会话

会话就是服务器和浏览器保有共同的小秘密的一段时间

工作原理

1、准备建立绘画的时候,PHP先会查看请求中是否包含session_id,如果没有服务器就会在自己内存中创建一个新的变量,这个变量即使session_id。
2、服务器会把这个session_id发送到浏览器保存,一般浏览器会把这个id保存在cookie。
3、之后每次我的浏览器再去访问服务器的时候,都会携带cookie中存储的这个session_id,这样服务器就认识到浏览器。
4、服务器端的session_id变量可以存放任意的会话数据,这些数据是经过序列化之后存放进去的
5、每次浏览器访问服务器,都可以凭借session_id到服务器的这个变量中得到自己的信息。
6、如果销毁会话,可以删掉会话中的数据,销毁会话文档