版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29412527/article/details/82963779
1、cookie和session的相关概念
http会话机制
- 请求响应无状态
- 实际是需要有状态的
cookie与session
通过cookie可以向客户端存储数据
多次设置cookie可以累加设置多个cookie键值对
document.cookie = ‘username=lisi’
document.cookie = ‘age=12’
document.cookie //username=lisi; age=12
cookie的格式
- 基本格式:键值对,多个cookie之间使用分号和空格隔开
- cookie的分类:会话cookie;持久cookie
- 过期时间:expires可以设置cookie有效期
- cookie是与域名和路径绑定的(在父路径中设置的cookie可以在子路径中获取,反过来不行)
- 父:www.baidu.com/abc
- 子:www.baidu.com/abc/a/b/c
- 安全性
- 大小限制:4k
两者区别
- cookie存储在浏览器端
- 安全性比较低,有可能被冒充
- cookie数据存储量有限制4k
- session存储在服务器端
- 安全性比较高
- 比较消耗服务器资源
- cookie和session的关系:
- session产生的id可以使用cookie存储
- 如果客户端cookie被禁用了,那么可以通过url重写(在url中携带)的方式支持session
(或者在表单中增加一个隐藏域存id,一般后端这样做)
url重写可以解决用户禁用cookie的情况下依然可以保持客户端和服务器的通信状态
2、原生js操作cookie
查看所有的cookie: document.cookie
设置cookie : document.cookie = “username=lisi”;
var date = new Date();
date.setDate(date.getDate()+1);
document.cookie = "abc=123; expires="+date.toGMTString()+"; path=/";
封装cookie
function setCookie(obj){
document.cookie = obj.key + "=" + obj.value + "; expires=" + obj.date + "; path=" + obj.path;
}
function getCookie(key){
var cookie = document.cookie;
var arr = cookie.split(";");
for(var i = 0; i < arr.length ; i++){
var kv = arr[i].split("=");
if(kv[0] == key){
return kv[1];
}
}
}
setCookie({
key: "ccc",
value: 233,
date: date,
path: "/"
});
3、jQuery插件操作cookie:jquery.cookie.js
https://github.com/carhartl/jquery-cookie
4、服务器session操作
session也是为了保存用户的状态,但是session比cookie安全,session是后端的技术,但是sesison可以依赖于cookie记录它的session id 。
<?php
//开启session
session_start();
?>