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”:“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,则在用户关闭浏览器后失效;

1旦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有效期为7天

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也是已加密的花样储存。同3个用户只产生一条数据,对于失效的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中

肆、    在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”]也得以取得相应的值

在那一个进度中:

cookie和session。一、    首先取妥当前用户的随意字符串

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(‘k1’,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分配一个唯壹的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

一、假使是数据库,供给在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模块获取3个权且地址tempfile.gettempdir()   

贰、    即使是缓存+数据库session,必要在settings.py中安插如下:

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

  3、总计:cookie弥补了http无状态的贫乏,让服务器知道来的人是“什么人”;可是cookie以文件的样式保留在地点,自己安全性较差;所以我们可以通过cookie识别不一样的用户,通过对应在session里保存私密的新闻以及当先4096字节的文本来确认保障卫安全全性。

  肆、cookie认证原理:

    通过友好写多个登陆页面,在证实了用户名和密码的不利后跳转到后台相应的页面。可是测试后也发觉,即使绕过登六页面一直输入后台的url地址也得以直接待上访问的,这一个肯定是不创造的。其实我们缺点和失误的正是cookie和session协作的阐明。有了那几个注脚进度,我们就足以兑现和其它网站一点差异也未有于必须登录才能跻身后台页面了。

       
先说一下那种认证的体制。每当大家使用一款浏览器做客2个登陆页面包车型地铁时候,一旦大家由此了验证。服务器端就会发送一组自由唯1的字符串(借使是1贰三abc)到浏览器端,那一个被存储在浏览端的事物就叫cookie。而服务器端也会本人积存一下用户日前的情状,比如login=true,username=hahaha之类的用户新闻。不过这种存款和储蓄是以字典方式储存的,字典的唯1key正是刚刚发给用户的绝无仅有的cookie值。那么只要在服务器端查看session消息的话,理论上就会看到如下样子的字典{‘1贰三abc’:{‘login’:true,’username:hahaha’}}。因为各种cookie都是唯一的,所以我们在电脑上换个浏览器再登陆同一个网址也亟需重新表明。那么为何说大家只是理论上看出这样子的字典呢?因为处于安全性的记挂,其实对于地点非常大字典不光key值1二叁abc是被加密的,value值{‘login’:true,’username:hahaha’}在服务器端也是同1被加密的。所以大家服务器上就是打开session新闻看来的也是近乎与以下样子的事物{’12三abc’:dasdasdasd123123壹da123123①}

  陆、单cookie认证方法

    亚洲必赢官网 7

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

      亚洲必赢官网 8

      亚洲必赢官网 9

 

      key指的时cookie的键,就一定于时cookie的身价id,也等于1把钥匙,而那把钥匙是服务器端设置好之后要发送给客户端的

      value指的是cookie的值,这么些值记录封存了cookie的片段相关音讯,有用户名密码等等

      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本人最大帮忙40九6字节,以及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

       第3个字段是session保存req对象的1些状态音讯属于session的值,那是个django加密后的值

       第一个字符串是创办session的小时

   肆、当设置完session后cookie的生成

      亚洲必赢官网 13

    注释:当设置好session后,django会把数据写入相应的表中,表中的首先列数据是django随机生成的字符串,对session来说那个自由生成的字符串是他的键,但是对cookie来说这么些自由变化的字符串是他的值,而他的键就改成了sessionid。客户端通过cookie中的键值对走访服务器端,服务器端通过cookie中的值来找到相应的session中的值即该客户端的相关音讯,然后再做出具体判定。那样1来cookie中所教导的数码就和事先的不平等了,不要问笔者何以,这一切都以django分装好了的,大家就算用就能够了,哎
冥冥之中自有运气。

  五、session的连锁操作

    1、session类型
(意思正是能够吧session存放在哪里,暗中认可是存放在在django提供好了的数据库中的)

      数据库(默认)

      缓存

      文件

      缓存+数据库

      加密cookie

    2、数据库session

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

       2、配置
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) #
设置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

        亚洲必赢官网 14

    5、文件session

        亚洲必赢官网 15

    6、缓存+数据库session

        亚洲必赢官网 16

    7、加密cookie session

        亚洲必赢官网 17

    八、扩张session用户认证

        亚洲必赢官网 18

 

 

 

 

 

        

 

 

 

      

 

网站地图xml地图