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,默认修改之后才保存(默认)


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号