状态保持 session和cookie

  • HTTP是一种无状态的协议,为了分辨链接是谁发起的,需自己去解决这个问题。不然有些情况下即使是同一个网站每打开一个页面也都要登录一下。而Session和Cookie就是为解决这个问题而提出来的两个机制。
应用场景
  • 登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。
  • session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。
区别
  • 存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
  • 一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全
  • Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。
  • 域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。
cookie被禁用怎么办?

保持登录的关键不是cookie 而是通过cookie保存和传输的session ID,本质是能获取用户信息的数据

除了cookie 还有用HTTP请求头来传输,请求头不会像cookie一样自动携带,需要手动处理

 

 

 

 

cookie的一些方法

存cookie

response.set_cookie('username',username,过期时间 max_age=秒) 

然后

renter 返回response 

 

 

取cookie  必须要有一个变量接受

先定义变量获取cookies的属性

cookies = request.COOKIES 

username = cookie.get('username','未拿到用户名')

然后返回 

return HttpResponse(username)

 

 

删cookie

response.delete_cookie('username')

然后返回 response

return response 

 

 

 

 

 session和cookie的用法

1. Session(一般用在购物车里面,因为他默认存活周期是14天,如果用它登录的话也可以不过要设置过期时间)

(1) 设置和存session

Request.session[你要存在key] = value

(2) 取session

Request.session.get(你存session的key值)

(3) 删session

del request.seesion[Key]

删除对应session, Key 值不存在时,引发报错

request.session.clear()

清空 Session 中的所有数据。这里客户端还会保留 sessionid

只不过在服务端 sessionid 对应的数据没有了。

request.session.flush()

INSTALLED_APPS = (

...

'django.contrib.sessions',

...

)

MIDDLEWARE_CLASSES = (

'django.contrib.sessions.middleware.SessionMiddleware',

...

)

直接删除当前客户端的的Seesion数据。这里不光服务端sessionid对应的数据没有了,客户端的sessionid也会被删除

 

 

2. Cookie(一般用在登录,因为他会随着浏览器的关闭而消亡)

(1) 设置和存cookie

Set_cookie(key,value值)

reponse = HttpResponse('这是一个关于cookie的测试')

reponse.set_cookie('test','hello cookie')

return reponse

(2) 取cookie

request.COOKIES.get('key值')

(3) 删除cookie

response = HttpResponse('这是一个关于cookie的测试')

response.delete_cookie(‘key值’)

return response

 

posted @ 2019-02-15 16:41  帅小博  阅读(287)  评论(0编辑  收藏  举报