zoukankan      html  css  js  c++  java
  • cookie和session基础以及在Django中应用

    看了会视频,终于搞懂了~

    1.cookie

    cookie:保存状态

    cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了。

    cookie缺点:

    1.最大支持4kb,现在也有厂商推出8kb,但是内存总归有限。

    2.cookie保存在客户端,容易被拦截或窃取。==》session诞生:存储字节大,存储内容多,保存在服务器,有较高的安全性,除非你服务器被攻击。

    服务端给客户端每个cookie分配唯一的id,用户在访问时,通过cookie就知道访问的人是谁。然后我们再根据不同的cookie的id,在服务器上保存一段时间的私密资料,如“账号密码”等等。

    cookie和session其实是共通性的东西,不限于语言和框架

    session和cookie都是类似key:value的形式

    把cookie保存的所有键值对信息都放到session里,session发送一个随机字符串给cookie,这样cookie就只有一个随机字符串,相当于一把钥匙。

    session里key是发送给cookie的随机字符串,value是cookie原来的键值对。

    session的键值对可以存在文件里,可以放在缓存里,可以放在数据库里。

    登陆应用原理:

    1.如果知道后台的url地址,我们就不需要通过登陆才能进入别的页面,所以需要一个验证过程,先登录才能进入其他页面。

    2.认证机制:一旦我们通过了认证。服务器端就会发送一组随机唯一的字符串(假设是123abc)到浏览器端,这个被存储在浏览端的东西就叫cookie。

    而服务器端也会自己存储一下用户当前的状态,比如login=true,username=hahaha之类的用户信息。但是这种存储是以字典形式存储的,字典的唯一key就是刚才发给用户的唯一的cookie值。那么如果在服务器端查看session信息的话,理论上就会看到如下样子的字典==》服务端key就是返回给客户端的cookie

    {'123abc':{'login':true,'username:hahaha'}}

    3.打开新浏览器依然需要重新登陆,服务端的key:value都是被加密的,看不到明文。

    cookie的基本使用

    1.获取cookie

     request.COOKIES.get(''islogin'',None) # 如果有就获取,没有就默认为None 

    2.设置cookie

    obj.set_cookie("islogin",True) # 服务端设置cookie的值。第一个参数是键,第二个参数是值
    
    obj.set_cookie("islogin",True,20) # 20代表过期时间

    3.删除cookie

      obj.delete_cookie("cookie_key",path="/",domain=name) 

    登陆认证实例:

    cookie存储到客户端

    优点:数据存储在客户端。减轻服务端的压力,提高网站的性能

    缺点:安全性不高,在客户端很容易被查看或破解用户会话信息

    session的基本使用

    如果有时候request.session拿不到session需要把中间件那个常量改成MIDWARE_CLASSES

    1.session的常用操作

    1 1、设置session值
    2     request.session["session_name"]="admin"
    3 2、获取session值
    4     session_name = request.session("session_name")
    5 3、删除session值
    6     del request.session["session_name"]  删除一组键值对
    7     request.session.flush()   删除一条记录
    8 4、检测是否操作session值
    9     if "session_name"  is request.session:

    2.一些非常用操作

     1 5、get(key, default=None)
     2  
     3 fav_color = request.session.get('fav_color', 'red')
     4  
     5 6、pop(key)
     6  
     7 fav_color = request.session.pop('fav_color')
     8  
     9 7、keys()
    10  
    11 8、items()
    12  
    13 9、setdefault()
    14  
    15 10、flush() 删除当前的会话数据并删除会话的Cookie。
    16             这用于确保前面的会话数据不可以再次被用户的浏览器访问
    17             例如,django.contrib.auth.logout() 函数中就会调用它。
    18 用户session的随机字符串
    19         request.session.session_key
    20   
    21         # 将所有Session失效日期小于当前日期的数据删除
    22         request.session.clear_expired()
    23   
    24         # 检查 用户session的随机字符串 在数据库中是否
    25         request.session.exists("session_key")
    26   
    27         # 删除当前用户的所有Session数据
    28         request.session.delete("session_key")
    29   
    30         request.session.set_expiry(value)
    31             * 如果value是个整数,session会在些秒数后失效。
    32             * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    33             * 如果value是0,用户关闭浏览器session就会失效。
    34             * 如果value是None,session会依赖全局session失效策略。

    3.流程解析

  • 相关阅读:
    error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
    configure: error: Cannot find OpenSSL's libraries
    PHP编译configure时常见错误
    解决PHP编译cURL的reinstall the libcurl问题
    Linux环境PHP7.0安装
    PHP 7的一些引人注目的新特性简单介绍
    (转).net webconfig使用IConfigurationSectionHandler自定section
    Asp.Net MVC 使用FileResult导出Excel数据文件
    ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
    [老老实实学WCF] 第十篇 消息通信模式(下) 双工
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9639861.html
Copyright © 2011-2022 走看看