cookie和session

cookie和session,cookiesession

依据cookie做用户验证时:敏感消息不相符放在cookie中

一、cookie与session简介

一、  cookie

金沙注册送58 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

  1、为何有cookie?

二、  session

金沙注册送58 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更新为别的的值。

cookie和session。设置session过期时间:

request.session.set_expiry(value)

比方value是个整数,session会在那么些秒数后失效;

若果value是datatime或timedelta,session会在这一个时刻后失效;

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

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

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

一、  cookie

金沙注册送58 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服务端中留存的多少为:

金沙注册送58 4

session = {

   随机字符串1:{

   用户1的相关信息

}

   随机字符串2:{

   用户2的相关信息

}

}

金沙注册送58 5

session客户端即客户端的浏览器的cookie中存的数码是当前用户对应的任意字符串

    cookie不属于http协议限制,由于http协议不能维持状态,但事实上意况,大家却又须要“保持状态”,因而cookie就是在那样2个境况下诞生。

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

请移步:

二、  session

金沙注册送58 6

session是保留于服务器端的键值对。保存格局是{“sessionid”:{“username”:“tom”,“passwd”:“12345陆”,}},sessionid代表用户的地位,session在寻觅时是基于sessionid来搜寻。查找到的value存款和储蓄着用户的个人音信。sessionid是用户访问服务器时Django自动创设分配的,存于cookie中,所以session须要正视cookie。在数据库中,key和value也是已加密的花样储存。同3个用户只发生一条数据,对于失效的session会自动更新而非重新创制。session暗中认可有效期为半个月。

session的简便操作:

获取session:request.session[key]

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

删除session:del request.session[key]

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

金沙注册送58 ,安装session过期时间:

request.session.set_expiry(value)

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

比方value是datatime或timedelta,session会在那几个时刻后失效;

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

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

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

session的工作经过

1、    生成自由字符串

二、    写到用户浏览器的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”]也得以拿走相应的值

在那个历程中:

一、    首先获得当前用户的4意字符串

二、    根据随便字符串获取相应的剧情

 

  二、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(‘k壹’,12叁)  存在则不安装

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
一、 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),此处小名重视缓存的设置

1、    借使是文本session, 必要在settings.py中安排如下:

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

SESSION_FILE_PATH=None 
缓存文件路径,假诺为None,则利用tempfile模块获取3个权且地址tempfile.gettempdir()   

二、    假设是缓存+数据库session,需求在settings.py中布署如下:

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

  三、总括:cookie弥补了http无状态的阙如,让服务器知道来的人是“什么人”;但是cookie以文件的款型保留在该地,本身安全性较差;所以大家得以由此cookie识别区别的用户,通过对应在session里保存私密的音信以及超越40玖6字节的文本来确定保障卫安全全性。

  四、cookie认证原理:

    通过投机写三个登6页面,在认证了用户名和密码的不错后跳转到后台相应的页面。可是测试后也发现,倘诺绕过登陆页面平素输入后台的url地址也能够一直访问的,那个鲜明是不客观的。其实大家缺点和失误的就是cookie和session协作的辨证。有了这些注解进度,我们就能够兑现和别的网站无差距于必须登录才能跻身后台页面了。

       
先说一下那种认证的编写制定。每当我们使用1款浏览器访问三个登6页面包车型地铁时候,一旦大家透过了验证。服务器端就会发送1组自由唯壹的字符串(借使是1贰三abc)到浏览器端,那一个被存储在浏览端的事物就叫cookie。而服务器端也会协调储存一下用户眼前的气象,比如login=true,username=hahaha之类的用户音讯。不过那种存款和储蓄是以字典情势储存的,字典的唯1key正是刚刚发给用户的绝无仅有的cookie值。那么一旦在劳务器端查看session消息的话,理论上就会看出如下样子的字典{‘1贰三abc’:{‘login’:true,’username:hahaha’}}。因为各类cookie都是绝无仅有的,所以我们在电脑上换个浏览器再登六同二个网址也需求再一次证实。那么为啥说咱俩只是理论上观望这样子的字典呢?因为远在安全性的设想,其实对于地点一点都不小字典不光key值1二3abc是被加密的,value值{‘login’:true,’username:hahaha’}在劳务器端也是一致被加密的。所以大家服务器上正是打开session新闻来看的也是接近与以下样子的东西{‘1贰三abc’:dasdasdasd1231231da1231231}

  6、单cookie认证方法

    金沙注册送58 7

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

      金沙注册送58 8

      金沙注册送58 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获取(不是相对,底层抓包能够赢拿到也得以被掩盖)

   7、在劳务器端直接获得客户端的cookie

      金沙注册送58 10

      注释:由于cookie是个字典方式的文书,就足以透过字典的格局来取值
赋值 删值

二、session

  一、session发生的原故

     cookie尽管在自然则然程度上缓解了“保持状态”的要求,不过出于cookie自己最大支持409陆字节,以及cookie本中国人民保险公司留在客户端,恐怕被挡住或窃取,由此就须求有1种新的事物,它能支撑更多的字节,并且他保留在服务器,有较高的安全性。这就是session,他首要存放在cookie一些气象新闻。

  2、session的精神正是个字典文件,能够在这么些字典文件中写入其余数据,数据保存在django的3个专程的数据库表中(django_session)

    金沙注册送58 11

 

    注释:由于req.session是个字典文件,那么就足以因此字典的方法向那几个文件添加数据,即壹组组的键值对,req.session[“字典键”]=”字典值”。

    那就一定于给req这几个目的设置3个session的值,来保存req这一个指标的1对意况。

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

    金沙注册送58 12

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

       第三个字段是session保存req对象的片段动静新闻属于session的值,那是个django加密后的值

       第多少个字符串是创建session的日子

   4、当设置完session后cookie的更动

      金沙注册送58 13

    注释:当设置好session后,django会把多少写入相应的表中,表中的第壹列数据是django随机生成的字符串,对session来说那一个自由变化的字符串是她的键,但是对cookie来说这么些自由生成的字符串是她的值,而她的键就变成了sessionid。客户端通过cookie中的键值对走访服务器端,服务器端通过cookie中的值来找到相应的session中的值即该客户端的有关音信,然后再做出切实判断。那样壹来cookie中所指点的数量就和此前的不一样了,不要问小编干什么,那壹切都以django分装好了的,大家固然用就能够了,哎
冥冥之中自有运气。

  5、session的有关操作

    1、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一的值为12三,要是存在则不安装

         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

        金沙注册送58 14

    5、文件session

        金沙注册送58 15

    6、缓存+数据库session

        金沙注册送58 16

    7、加密cookie session

        金沙注册送58 17

    八、扩充session用户认证

        金沙注册送58 18

 

 

 

 

 

        

 

 

 

      

 

相关文章

网站地图xml地图