zoukankan      html  css  js  c++  java
  • 状态保持 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

  • 相关阅读:
    让自己的网站或博客被百度收录的小技巧
    Linux cp一个文件夹时提示cp: omitting directory `test/'
    svn checkout 提示“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”解决方法
    Linux iptables开放特定端口
    CentOS7使用iptables防火墙开放端口
    Linux平台的SVN服务器的配置及搭建
    官网svn提交到代码库,但是不能同步到web目录
    【LINUX】SVN 代码提交之后。同步到web目录下
    React Native For Android 架构初探
    腾讯QQ会员技术团队:以手机QQ会员H5加速为例,为你揭开sonic技术内幕
  • 原文地址:https://www.cnblogs.com/bo686/p/10384448.html
Copyright © 2011-2022 走看看