cookie和session

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会在那个小时后失效;

1旦value是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就是在如此3个风貌下诞生。

三、实例cookie和session合作的记名验证

请移步:

二、  session

美高梅开户网址 6

session是保存于劳动器端的键值对。保存形式是{“sessionid”:{“username”:“tom”,“passwd”:“12345六”,}},sessionid代表用户的身份,session在搜索时是依照sessionid来探寻。查找到的value存款和储蓄着用户的个人消息。sessionid是用户访问服务器时Django自动创造分配的,存于cookie中,所以session需求依赖cookie。在数据库中,key和value也是已加密的款式储存。同三个用户只爆发一条数据,对于失效的session会自动更新而非重新创造。session默许有效期为半个月。

cookie和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的干活历程

1、    生成自由字符串

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

3、    保存到session中

4、    在任意字符串对应的字典中安装相关内容

而上述进程在Django中的反映为:

request.session[“username”]=user

此地的username为通过request.POST.get(“username”)在此以前端html页面中获得到的用户名信息

注意:

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

python manage.py makemigrations

python manage.py migrate

 

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

 

一点差距也未有于的经过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(‘k1’,none)

 

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

request.session.setdefault(‘k1’,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保存的不2秘诀(暗中同意)

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分配3个唯1的id,那样用户在走访时,通过cookie,服务器就精通来的人是“哪个人”。然后咱们再依照分歧的cookie的id,在服务器上保留1段时间的私密资料,如“账号密码”等等

四、调试

浏览器报错:’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,个中内部提供了五体系型的session供开发者使用:

数据库(默认)

美高梅开户网址,缓存

文件

缓存+数据库

加密cookie

1、假使是数据库,供给在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认证原理:

    通过本身写3个登六页面,在证实了用户名和密码的不利后跳转到后台相应的页面。可是测试后也意识,要是绕过登陆页面一向输入后台的url地址也得以直接待上访问的,那些肯定是不创设的。其实大家缺点和失误的就是cookie和session合作的求证。有了那些表明进程,大家就足以兑现和任何网站1律必须登录才能跻身后台页面了。

       
先说一下那种认证的编写制定。每当大家使用一款浏览器访问三个登6页面包车型客车时候,一旦大家透过了印证。服务器端就会发送1组自由唯1的字符串(假诺是1二3abc)到浏览器端,这一个被存储在浏览端的东西就叫cookie。而服务器端也会友善储存一下用户眼下的场所,比如login=true,username=hahaha之类的用户音讯。不过那种存储是以字典情势储存的,字典的绝无仅有key正是刚刚发给用户的绝无仅有的cookie值。那么一旦在劳务器端查看session新闻的话,理论上就见面到如下样子的字典{’12叁abc’:{‘login’:true,’username:hahaha’}}。因为各个cookie都是绝无仅有的,所以大家在电脑上换个浏览器再登6同3个网址也急需再行应验。那么为啥说大家只是理论上看出那样子的字典呢?因为处在安全性的设想,其实对于地点相当大字典不光key值12三abc是被加密的,value值{‘login’:true,’username:hahaha’}在劳务器端也是千篇一律被加密的。所以我们服务器上正是打开session新闻来看的也是相仿与以下样子的东西{‘1二3abc’:dasdasdasd1231231da1231231}

  六、单cookie认证情势

    美高梅开户网址 7

    注释:能够透过如下方式来设置cookie(前提是发生1个再次来到的靶子后再安装重返对象内的cookie)

      美高梅开户网址 8

      美高梅开户网址 9

 

      key指的时cookie的键,就一定于时cookie的地方id,相当于1把钥匙,而那把钥匙是劳务器端设置好之后要发送给客户端的

      value指的是cookie的值,这一个值记录保留了cookie的局部相关消息,有用户名密码等等

      max_age指的是cookie保存的有效期,即cookie里面包车型地铁内容后台保存多长期清空,暗许单位是秒

      expries指的是cookie的保留时间,设置格外都得以

      path指的是 Cookie生效的不2秘籍,/
表示根路径,特殊的:跟路径的cookie可以被别的url的页面访问

      domain=None,
Cookie生效的域名

      secure=False,
https传输 

      
httponly=False
只好http协议传输,不能被JavaScript获取(不是纯属,底层抓包能够取得到也得以被遮盖)

   7、在服务器端直接拿走客户端的cookie

      美高梅开户网址 10

      注释:由于cookie是个字典方式的公文,就足以因而字典的不二法门来取值
赋值 删值

二、session

  一、session发生的缘故

     cookie虽然在自然水准上化解了“保持状态”的要求,但是由于cookie本身最大支撑40九陆字节,以及cookie本身保留在客户端,或许被拦截或窃取,由此就需求有一种新的东西,它能扶助愈多的字节,并且她保留在服务器,有较高的安全性。那正是session,他首要存放在cookie一些动静音信。

  贰、session的真面目正是个字典文件,可以在这些字典文件中写入别的数据,数据保存在django的2个专程的数据库表中(django_session)

    美高梅开户网址 11

 

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

    那就也正是给req那么些目的设置1个session的值,来保存req那几个目的的片段意况。

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

    美高梅开户网址 12

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

       第一个字段是session保存req对象的一些情形音信属于session的值,那是个django加密后的值

       第多少个字符串是创立session的年华

   四、当设置完session后cookie的转变

      美高梅开户网址 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,暗许修改以往才保存(暗许)

    
3、对存放在数据库中的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) #
设置k一的值为1二叁,如果存在则不安装

         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

    八、增添session用户认证

        美高梅开户网址 18

 

 

 

 

 

        

 

 

 

      

 

发表评论

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

网站地图xml地图