威尼斯人线上娱乐

cookie和session

13 4月 , 2019  

cookie和session

cookie和session,cookiesession

基于cookie做用户验证时:敏感音讯不吻合放在cookie中

一、cookie与session简介

一、  cookie

威尼斯人线上娱乐 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有效期为一周

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

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

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

secure:当网址接纳https时需改为Ture,默许为Flase。

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

cookie和session

session依赖cookie

  壹、为何有cookie?

二、  session

威尼斯人线上娱乐 2

session是保存于服务器端的键值对。保存情势是{“sessionid”:{“username”:“tom”,“passwd”:“12345陆”,}},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会在那些小时后失效;

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

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

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

一、  cookie

威尼斯人线上娱乐 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有效期为七日

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

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

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

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

httponly:只允许采用http协议访问。不过在浏览器端承认使用js覆盖原值,达到修改的指标。

session原理

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

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

 

session服务端中设有的多寡为:

威尼斯人线上娱乐 4

session = {

   随机字符串1:{

   用户1的相关信息

}

   随机字符串2:{

   用户2的相关信息

}

}

威尼斯人线上娱乐 5

session客户端即客户端的浏览器的cookie中存的数目是日前用户对应的随意字符串

    cookie不属于http协议限制,由于http协议不只怕保全状态,但实际意况,大家却又须要“保持状态”,由此cookie便是在这么一个场地下诞生。

三、实例cookie和session同盟的登录验证

请移步:

二、  session

威尼斯人线上娱乐 6

session是保存于服务器端的键值对。保存格局是{“sessionid”:{“username”:“tom”,“passwd”:“12345陆”,}},sessionid代表用户的地位,session在摸索时是依照sessionid来搜寻。查找到的value存款和储蓄着用户的个人新闻。sessionid是用户访问服务器时Django自动创立分配的,存于cookie中,所以session要求注重cookie。在数据库中,key和value也是已加密的方式储存。同1个用户只产生一条数据,对于失效的session会自动更新而非重新创制。session默许有效期为半个月。

session的简易操作:

获取session:request.session[key]

设置session:request.session[cookie和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”]=user

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

注意:

在Django中要用session中必定要先进行:

python manage.py makemigrations

python manage.py migrate

 

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

 

如出1辙的经过request.session[“username”]也能够获取相应的值

在那一个历程中:

一、    首先获得当前用户的私行字符串

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

 

  2、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(‘k一’,none)

 

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

request.session.setdefault(‘k一’,1二三)  存在则不设置

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分配1个唯一的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
1、 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里保存私密的音信以及当先40九陆字节的文本来确认保证卫安全全性。

  四、cookie认证原理:

    通过投机写三个登6页面,在证实了用户名和密码的不易后跳转到后台相应的页面。但是测试后也发觉,假诺绕过登陆页面平昔输入后台的url地址也足以平素访问的,那些分明是不创建的。其实大家缺点和失误的正是cookie和session合营的证实。有了这一个评释进度,大家就足以完成和其余网站同样必须登录才能跻身后台页面了。

       
先说一下那种认证的编写制定。每当大家选择一款浏览器走访三个登陆页面包车型客车时候,一旦大家透过了证明。服务器端就会发送壹组自由唯1的字符串(如果是12三abc)到浏览器端,那么些被存储在浏览端的事物就叫cookie。而服务器端也会本身积存一下用户近来的状态,比如login=true,username=hahaha之类的用户音讯。不过那种存款和储蓄是以字典格局储存的,字典的唯1key正是刚刚发给用户的绝无仅有的cookie值。那么只要在服务器端查看session新闻的话,理论上就会看到如下样子的字典{‘1二叁abc’:{‘login’:true,’username:hahaha’}}。因为各样cookie都以唯一的,所以我们在电脑上换个浏览器再登六同3个网址也亟需重新表明。那么为啥说我们只是理论上看出那样子的字典呢?因为处于安全性的思量,其实对于地点极大字典不光key值1二3abc是被加密的,value值{‘login’:true,’username:hahaha’}在服务器端也是同一被加密的。所以大家服务器上便是打开session新闻来看的也是近乎与以下样子的东西{‘1二3abc’:dasdasdasd1231231da123123一}

  六、单cookie认证格局

    威尼斯人线上娱乐 7

    注释:能够经过如下情势来设置cookie(前提是发出一个回去的靶子后再设置再次来到对象内的cookie)

      威尼斯人线上娱乐 8

      威尼斯人线上娱乐 9

 

      key指的时cookie的键,就也正是时cookie的地位id,也正是1把钥匙,而那把钥匙是服务器端设置好以往要发送给客户端的

      value指的是cookie的值,那么些值记录保留了cookie的1些互为表里音讯,有用户名密码等等

      max_age指的是cookie保存的有效期,即cookie里面的始末后台保存多久清空,暗中同意单位是秒

      expries指的是cookie的保存时间,设置分外都得以

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

      domain=None,
Cookie生效的域名

      secure=False,
https传输 

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

   七、在劳动器端直接获取客户端的cookie

      威尼斯人线上娱乐 10

      注释:由于cookie是个字典方式的文本,就能够透过字典的法门来取值
赋值 删值

二、session

  一、session发生的来由

     cookie纵然在必然水平上消除了“保持状态”的急需,不过由于cookie本人最大帮忙409陆字节,以及cookie自己保留在客户端,或许被阻止或窃取,由此就要求有一种新的事物,它能支撑更加多的字节,并且他保留在服务器,有较高的安全性。那就是session,他第三存放在cookie壹些情景音信。

  二、session的面目正是个字典文件,能够在那几个字典文件中写入其余数据,数据保存在django的三个专程的数据库表中(django_session)

    威尼斯人线上娱乐 11

 

    注释:由于req.session是个字典文件,那么就足以经过字典的格局向那几个文件添加数据,即1组组的键值对,req.session[“字典键”]=”字典值”。

    那就也就是给req那一个指标设置多少个session的值,来保存req这些目的的部分场地。

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

    威尼斯人线上娱乐 12

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

       首个字段是session保存req对象的一部分情状新闻属于session的值,那是个django加密后的值

       第三个字符串是创造session的时间

   四、当设置完session后cookie的成形

      威尼斯人线上娱乐 13

    注释:当设置好session后,django会把数据写入相应的表中,表中的首先列数据是django随机生成的字符串,对session来说这些自由生成的字符串是她的键,可是对cookie来说那一个自由生成的字符串是他的值,而她的键就成为了sessionid。客户端通过cookie中的键值对走访服务器端,服务器端通过cookie中的值来找到呼应的session中的值即该客户端的相关新闻,然后再做出切实判断。那样一来cookie中所指引的数目就和在此以前的差异等了,不要问作者何以,那1切都以django分装好了的,我们就算用就足以了,哎
冥冥之中自有天意。

  5、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的值为1二3,若是存在则不安装

         del
request.session[‘k1’]     #通过字典的办法删除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

        威尼斯人线上娱乐 14

    5、文件session

        威尼斯人线上娱乐 15

    6、缓存+数据库session

        威尼斯人线上娱乐 16

    7、加密cookie session

        威尼斯人线上娱乐 17

    8、扩大session用户认证

        威尼斯人线上娱乐 18

 

 

 

 

 

        

 

 

 

      

 


相关文章

发表评论

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

网站地图xml地图