Django中使用cookie和session
-
-
在一次绘画的多次请求中数据共享,这就是会话跟踪计数
二、cookie
-
什么是cookie
-
首先来讲,cookie是浏览器技术,cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,可以理解为服务端给客户端的一个小甜点,下次访问服务器时会自动携带这些键值对,以便服务器提取有用信息。
-
-
cookie的原理
-
cookie的工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容,浏览器收到响应后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是谁了。
-
-
cookie与HTTP头
-
cookie是通过HTTP请求和响应头在客户端和服务器端传递的
-
cookie:请求头,客户端发送给服务器端
-
格式:
cookie
:a=A;b=B。既多个cookie用分号隔开 -
set-cookie:响应头,服务器端发送给客户端;
-
-
cookie的覆盖
-
如果服务器端发送重复的cookie那么会覆盖原有的cookie,例如客户端的第一个请求服务器端发送的cookie是set-cookie:a=A;第二个请求服务器端发送的是:set-cookie:a=AA,那么客户端只留下一个cookie,即:a=AA
三、django中操作cookie
-
Ctrl + Shift + del三个键来清除页面缓存和cookie,将来这个操作你会用的很多。
-
获取cookie
-
request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=Non
default:默认值
salt:加密盐
max_age:后台控制过期时间 -
rep = Httpresponse(...) rep = render(request,''') rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt='加密盐',max_age=None,...)
-
key:键
-
value:值
-
max_age=None,超时时间
-
expires=None,超时时间
-
path='/',cookie生效的域名
-
secure=False,https传输
-
httponly=False 只能http协议传输,无法被Javascript获取
-
-
def login(request): rep = redrect("/login/") rep.delete_cookie("user") #删除用户浏览器上之前设置的usercookie值 return rep
request.session['k1'] request.session.get('k1',none) #request.session这句是帮你从cookie里面将sessionid的值取出来,
将django-session表里面的对应sessionid的值的那条记录中的session-data字段的数据给你拿出来(并解密),get方法就取出k1这个键对应的值 查看所有的键、值、键值对 request.session.keys() request.session.values() request.session.items()
request.session['k1'] = 123 request.session.setdefault('k1',123) #没有就添加,有就不变 #帮你生成随机字符串,帮你将这个随机字符串和用户数据(加密后)和过期时间保存到了django-session表里面,
帮你将这个随机字符串以sessionid:随机字符串的方式添加到cookie里面返回给浏览器,这个sessionid的名字是可以改的 #注意一个事情,django-session这个表,你不能通过orm来控制,因为你的models.py里面没有这个表的对应关系
del request.session['k1'] #django-session表里面同步删除 #删除当前的会话数据并删除会话的cookie。 request.session.flush() #常用,清空所有cookie --- 删除session表里这个会话的记录,
Django中默认支持session其内部提供了5种类型的session供开发者使用 1. 数据库Session SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) 2. 缓存Session SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 3. 文件Session SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 4. 缓存+数据库 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎 5. 加密Cookie Session SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎 其他公用设置项: 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,默认修改之后才保存(默认)