cookie和session

By admin in 4858.com on 2019年3月30日

cookie和session

cookie和session,cookiesession

基于cookie做用户验证时:敏感新闻不切合放在cookie中

一、cookie与session简介

一、  cookie

4858.com 1

cookie是保留在浏览器本地的键值对。浏览器和服务器之间传输时,它是在响应头里带有的。浏览器和劳动器端都能够安装cookie。浏览器选取js向劳动器端传送或涂改cookie,例如在浏览器控台写document.cookie=”user=tom”。

劳务器端设置cookie的各个参数:

request.set_cookie(key,value,max_age=,expires=,path=’/’,domain=’’,secure=False,httponly=False)

max_age:cookie的有效期,单位为秒,不过IE不认

expires:cookie的有效期,值为datatime类型。

eg:设置cookie有效期为7天

expires=datatime.datatime.utcnow()+datatime.timedelta(day=7)

path:设置该cookie只在该路线下生效

domain:设置在该二级域名下生效

secure:当网站使用https时需改为Ture,暗中同意为Flase。

httponly:只同意使用http协议访问。可是在浏览器端认同使用js覆盖原值,达到修改的目标。

cookie和session

session依赖cookie

  壹 、为啥有cookie?

二、  session

4858.com 2

session是保存于劳动器端的键值对。保存格局是{“sessionid”:{“username”:“tom”,“passwd”:“123456”,}},sessionid代表用户的地位,session在追寻时是依据sessionid来寻找。查找到的value存款和储蓄着用户的个人音信。sessionid是用户访问服务器时Django自动创制分配的,存于cookie中,所以session须要依赖cookie。在数据库中,key和value也是已加密的款式储存。同二个用户只产生一条数据,对于失效的session会自动更新而非重新创立。session私下认可有效期为半个月。

session的简便操作:

获取session:request.session[key]

设置session:request.session[key]=value

删除session:del request.session[key]

注:删除实际上并非真正的删除,而是将数据库的session_data更新为任何的值。

安装session过期时间:

request.session.set_expiry(value)

要是value是个整数,session会在这个秒数后失效;

若是value是datatime或timedelta,session会在那几个日子后失效;

一旦value是0,则在用户关闭浏览器后失效;

只要value是none,session会在凭借全局session失效策略。

session失效并从未从数据库中删去。

一、  cookie

4858.com 3

cookie是保存在浏览器本地的键值对。浏览器和服务器之间传输时,它是在响应头里含有的。浏览器和服务器端都足以安装cookie。浏览器采取js向劳动器端传送或修改cookie,例如在浏览器控台写document.cookie=”user=tom”。

劳动器端设置cookie的各个参数:

request.set_cookie(key,value,max_age=,expires=,path=’/’,domain=’’,secure=False,httponly=False)

max_age:cookie的有效期,单位为秒,可是IE不认

expires:cookie的有效期,值为datatime类型。

eg:设置cookie有效期为7天

expires=datatime.datatime.utcnow()+datatime.timedelta(day=7)

path:设置该cookie只在该路线下生效

domain:设置在该二级域名下生效

secure:当网站使用https时需改为Ture,暗许为Flase。

httponly:只同意利用http协议访问。但是在浏览器端承认使用js覆盖原值,达到修改的指标。

session原理

cookie是保留在用户浏览器端的键值对

session是保留在劳务器端的键值对

 

session服务端中留存的数码为:

4858.com 4

session = {

   随机字符串1:{

   用户1的相关信息

}

   随机字符串2:{

   用户2的相关信息

}

}

4858.com 5

session客户端即客户端的浏览器的cookie中存的多寡是时下用户对应的人身自由字符串

    cookie不属于http协议限制,由于http协议相当的小概维持状态,但骨子里情状,大家却又必要“保持状态”,由此cookie正是在如此3个光景下诞生。

叁 、实例cookie和session协作的登录验证

请移步:

二、  session

4858.com 6

session是保留于服务器端的键值对。保存方式是{“sessionid”:{“username”:“tom”,“passwd”:“123456”,}},sessionid代表用户的地位,session在摸索时是遵照sessionid来查找。查找到的value存款和储蓄着用户的个人音讯。sessionid是用户访问服务器时Django自动成立分配的,存于cookie中,所以session须要依赖cookie。在数据库中,key和value也是已加密的方式储存。同三个用户只发生一条数据,对于失效的session会自动更新而非重新创造。session私下认可有效期为半个月。

session的简约操作:

获取session:request.session[key]

设置session:request.session[key]=value

删除session:del request.session[key]

注:删除实际上并非真正的删除,而是将数据库的session_data更新为其余的值。

安装session过期时间:

request.session.set_expiry(value)

即便value是个整数,session会在那几个秒数后失效;

一旦value是datatime或timedelta,session会在这么些时刻后失效;

只要value是0,则在用户关闭浏览器后失效;

假使value是none,session会在依靠全局session失效策略。

session失效并从未从数据库中剔除。

session的做事历程

① 、    生成自由字符串

贰 、    写到用户浏览器的cookie中

3、    保存到session中

肆 、    在肆意字符串对应的字典中设置相关内容

而上述进度在Django中的体现为:

request.session[“username”]cookie和session。=user

那里的username为经过request.POST.get(“username”)在此从前端html页面中拿走到的用户名音讯

注意:

在Django中要用session中必将要先实施:

python manage.py makemigrations

python manage.py migrate

 

当用户登录的时候的就会在数据库的django_session表中记录session音讯

 

一样的经过request.session[“username”]也得以博得相应的值

在这几个进度中:

① 、    首先获得当前用户的妄动字符串

② 、    依据随便字符串获取相应的始末

 

  贰 、cookie工作规律

四、调试

浏览器报错:’WSGIRequest’ object has no attribute ‘session’ 

解决方案:由于在pycharm中写session时不提示session的相关操作,所以将settings.py中的中间件由MIDDLEWARE改为MIDDLEWARE_CLASSES。实际上,根据其他博客所写,这是Django版本的问题,1.10之前,中间件的key为MIDDLEWARE_CLASSES, 1.10之后,为MIDDLEWARE。所以在开发环境和其他环境的版本不一致时,要特别小心,会有坑。 (参考文章:http://blog.csdn.net/xiongjiezk/article/details/53220302)

 

叁 、实例cookie和session合营的登录验证

请移步:

session的操作

 

request.session[“k1”]  如果不存在则会报错

request.session.get[“k1”],假设不存在则会报错,为了防患出错能够request.session.get(‘k1’,none)

 

request.session[‘k1’] = 123 设置session值

request.session.setdefault(‘k1’,123)  存在则不安装

del request.session[‘k1’]  删除

request.session.clear()    删除

 

所有 键、值、键值对

request.session.keys()

request.session.values()

request.session.items()

request.session.iterkeys()

request.session.itervalues()

request.session.iteritems()

 

用户session的私行字符串

request.session.session_key

 

将有着Session失效日期小于当前几日期的数目删除

request.session.clear_expired()

 

检查 用户session的任意字符串 在数据库中是或不是

request.session.exists(“session_key”)

 

去除当前用户的全数Session数据

request.session.delete(“session_key”)

 

request.session.set_expiry(value)

私下认可的过期时间是两周,要是自身设置了晚点时间,这样本身设定的先行级就会超越暗中同意的

只要value是个整数,session会在些秒数后失效。

借使value是个datatime或timedelta,session就会在那几个时间后失效。

假设value是0,用户关闭浏览器session就会失灵。

假如value是None,session会信赖全局session失效策略。

 

配置setting.py

SESSION_COOKIE_NAME = “sessionid”      #
Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(暗许)

SESSION_COOKIE_PATH = “/”              #
Session的cookie保存的不二法门(暗中同意)

SESSION_COOKIE_DOMAIN = None             #
Session的cookie保存的域名(暗中同意)

SESSION_COOKIE_SECURE = False          # 是否Https传输cookie(默认)

SESSION_COOKIE_HTTPONLY = True         #
是否Session的cookie只支持http传输(默认)

SESSION_COOKIE_AGE = 1209600             #
Session的cookie失效日期(2周)(暗许)

SESSION_EXPIRE_AT_BROWSER_CLOSE = False    #
是或不是关闭浏览器使得Session过期(暗许)

SESSION_SAVE_EVERY_REQUEST = False        #
是或不是每便请求都保留Session,暗中同意修改之后才保存(暗中同意)

 

    cookie的办事原理是:由服务器发生内容,浏览器收到请求后保存在该地;当浏览器再度做客时,浏览器会自动带上cookie,那样服务器就能透过cookie的内容来判定这一个是“何人”了。例如服务端能够给种种客户端的cookie分配一个唯一的id,那样用户在拜访时,通过cookie,服务器就清楚来的人是“哪个人”。然后大家再遵照分裂的cookie的id,在服务器上保留一段时间的私密资料,如“账号密码”等等

四、调试

浏览器报错:’WSGIRequest’ object has no attribute ‘session’ 

解决方案:由于在pycharm中写session时不提示session的相关操作,所以将settings.py中的中间件由MIDDLEWARE改为MIDDLEWARE_CLASSES。实际上,根据其他博客所写,这是Django版本的问题,1.10之前,中间件的key为MIDDLEWARE_CLASSES, 1.10之后,为MIDDLEWARE。所以在开发环境和其他环境的版本不一致时,要特别小心,会有坑。 (参考文章:http://blog.csdn.net/xiongjiezk/article/details/53220302)

 

cookie和 session
壹 、 cookie
cookie是保存在浏览器本地的键值对。浏览器和服务器之间传输时,它是在响应头里含有的…

Django中对于session的存储方式

Django中扶助session,当中内部提供了5体系型的session供开发者使用:

数据库(默认)

缓存

文件

缓存+数据库

加密cookie

① 、即使是数据库,要求在settings.py中布局如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.db’ (引擎(默认))

贰 、如若是缓存session,供给在settings.py中配置如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’(引擎)

SESSION_CACHE_ALIAS= ‘default’
 使用的缓存小名(私下认可内部存款和储蓄器缓存,也得以是memcache),此处别称注重缓存的设置

壹 、    借使是文本session, 须求在settings.py中布局如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.file’ (引擎)

SESSION_FILE_PATH=None 
缓存文件路径,即使为None,则运用tempfile模块获取几个一时半刻地址tempfile.gettempdir()   

贰 、    如若是缓存+数据库session,必要在settings.py中配备如下:

SESSION_ENGINE=’django.contrib.sessions.backends.cached_db’      
(引擎)

  叁 、计算:cookie弥补了http无状态的紧缺,让服务器知道来的人是“什么人”;然而cookie以文件的款型保留在当地,自个儿安全性较差;所以大家得以透过cookie识别不一样的用户,通过对应在session里保存私密的音讯以及超越4096字节的文本来确定保证卫安全全性。

  肆 、cookie认证原理:

    通过祥和写二个登陆页面,在印证了用户名和密码的没错后跳转到后台相应的页面。但是测试后也意识,假使绕过登陆页面向来输入后台的url地址也可以直接待上访问的,那个肯定是不创立的。其实大家缺点和失误的就是cookie和session合营的印证。有了这几个评释进度,大家就能够达成和任何网站同样必须登录才能进入后台页面了。

       
先说一下那种认证的编写制定。每当大家使用一款浏览器做客一个登陆页面包车型大巴时候,一旦大家经过了验证。服务器端就会发送一组自由唯一的字符串(假诺是123abc)到浏览器端,这一个被存储在浏览端的事物就叫cookie。而服务器端也会融洽积存一下用户眼下的情景,比如login=true,username=hahaha之类的用户信息。可是这种存款和储蓄是以字典情势储存的,字典的唯一key就是刚刚发给用户的唯一的cookie值。那么只要在服务器端查看session音讯的话,理论上就会看到如下样子的字典{‘123abc’:{‘login’:true,’username:hahaha’}}。因为各类cookie都是唯一的,所以大家在电脑上换个浏览器再登陆同2个网站也必要再一次印证。那么为啥说作者们只是理论上看到那样子的字典呢?因为远在安全性的考虑,其实对于地点极大字典不光key值123abc是被加密的,value值{‘login’:true,’username:hahaha’}在劳务器端也是同等被加密的。所以大家服务器上正是打开session音讯看来的也是相近与以下样子的事物{‘123abc’:dasdasdasd1231231da1231231}

  六 、单cookie认证方式

    4858.com 7

    注释:能够透过如下格局来安装cookie(前提是发生三个重临的对象后再设置再次回到对象内的cookie)

      4858.com 8

      4858.com 9

 

      key指的时cookie的键,就相当于时cookie的地位id,约等于一把钥匙,而这把钥匙是劳动器端设置好以往要发送给客户端的

      value指的是cookie的值,这几个值记录保留了cookie的有的连锁信息,有用户名密码等等

      max_age指的是cookie保存的有效期,即cookie里面包车型地铁始末后台保存多长期清空,私下认可单位是秒

      expries指的是cookie的保留时间,设置尤其都得以

      path指的是 Cookie生效的路线,/
表示根路径,特殊的:跟路径的cookie能够被其余url的页面访问

      domain=None,
Cookie生效的域名

      secure=False,
https传输 

      
httponly=False
只好http协议传输,不能被JavaScript获取(不是相对,底层抓包能够获取到也能够被掩盖)

   ⑦ 、在劳动器端直接获得客户端的cookie

      4858.com 10

      注释:由于cookie是个字典情势的文件,就能够通过字典的格局来取值
赋值 删值

二、session

  一 、session产生的原故

     cookie就算在必然水平上消除了“保持状态”的供给,但是出于cookie自己最大扶助4096字节,以及cookie自己保留在客户端,恐怕被截留或窃取,因而就须要有一种新的事物,它能辅助更多的字节,并且他保留在服务器,有较高的安全性。那正是session,他第三存放cookie一些气象消息。

  贰 、session的精神正是个字典文件,能够在这些字典文件中写入此外数据,数据保存在django的一个专程的数据库表中(django_session)

    4858.com 11

 

    注释:由于req.session是个字典文件,那么就能够透过字典的主意向这些文件添加数据,即一组组的键值对,req.session[“字典键”]=”字典值”。

    那就一定于给req这几个目的设置一个session的值,来保存req这几个目的的片段动静。

  3、django_session表内容,该表是出于您在第22中学装置session后django自动生成的记录。

    4858.com 12

    注释:第一个字段是session随机生成的字符串属于session的键,这么些字符串当做cookie键值对中的值发送给cookie

       第二个字段是session保存req对象的部分情况消息属于session的值,那是个django加密后的值

       第伍个字符串是创造session的日子

   四 、当设置完session后cookie的浮动

      4858.com 13

    注释:当设置好session后,django会把数据写入相应的表中,表中的首先列数据是django随机生成的字符串,对session来说那一个自由变化的字符串是她的键,不过对cookie来说那个自由生成的字符串是她的值,而她的键就改成了sessionid。客户端通过cookie中的键值对走访服务器端,服务器端通过cookie中的值来找到呼应的session中的值即该客户端的有关新闻,然后再做出具体判断。那样一来cookie中所教导的数量就和事先的不均等了,不要问笔者怎么,这一切都以django分装好了的,咱们只管用就能够了,哎
冥冥之中自有天意。

  五 、session的相关操作

    壹 、session类型
(意思正是能够吧session存放在何地,默许是存放在在django提供好了的数据库中的)

      数据库(默认)

      缓存

      文件

      缓存+数据库

      加密cookie

    2、数据库session

      一 、Django私下认可支持Session,并且暗中同意是将Session数据存款和储蓄在数据库中,即:django_session
表中。

       贰 、配置
settings.py来安装存放在数据库中session的相干音讯

        SESSION_ENGINE = ‘django.contrib.sessions.backends.db’ # 引擎(默认)

        SESSION_COOKIE_NAME = “sessionid” #
Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(暗许)
  

        SESSION_COOKIE_PATH = “/” # Session的cookie保存的路子(默许)
  

        SESSION_COOKIE_DOMAIN = None
#
Session的cookie保存的域名(暗中认可)

          SESSION_COOKIE_SECURE = False
#
是否Https传输cookie(默认)

        SESSION_COOKIE_HTTPONLY = True
#
是否Session的cookie只支持http传输(默认)

        SESSION_COOKIE_AGE = 1209600
#
Session的cookie失效日期(2周)(暗中同意)

        SESSION_EXPIRE_AT_BROWSER_CLOSE
= False #
是不是关闭浏览器使得Session过期(暗中认可)

         SESSION_SAVE_EVERY_REQUEST =
False #
是还是不是每回请求都保留Session,暗中认可修改将来才保存(暗中认可)

    
叁 、对存放在数据库中的session举行相关操作(操作命令ajango已经给我们分装好了)

       def index(request):

        request.session[‘k1’] 
#由此字典的措施来收获session中的值

        
request.session.get(‘k1’,None)#透过get的格局来获得session中的值,倘若获得不到就给他个私下认可值为None

        request.session[‘k1’] = 123  #经过字典的办法来安装session中的值

        request.session.setdefault(‘k1’,123) #
设置k1的值为123,假诺存在则不设置

         del
request.session[‘k1’]4858.com ,     #透过字典的艺术删除session中的值

        
request.session.keys()
    #经过字典的情势来取session中兼有的键

        request.session.values()    #因此字典的法子来取session中全体的值

         request.session.items()
     #透过字典的主意来取session中享有的键值对

        
request.session.iterkeys()

        
request.session.itervalues()

         request.session.iteritems()  

        
request.session.session_key  #
用户session的私行字符串

        
request.session.clear_expired()   # 将有着Session失效日期小于超过天子的数码删除

         request.session.exists(“session_key”)    # 检查 用户session的肆意字符串
在数据库中是还是不是

         request.session.delete(“session_key”)   #
删除当前用户的有所Session数据

     4、缓存session

        4858.com 14

    5、文件session

        4858.com 15

    6、缓存+数据库session

        4858.com 16

    7、加密cookie session

        4858.com 17

    捌 、增加session用户认证

        4858.com 18

 

 

 

 

 

        

 

 

 

      

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有