Django SESSION 和COOKIE

SEESION:

SESSION 一般用来‘’保持会话‘’,Session 对象存储特定用户会话所需的属性及配置信息,当页面跳转时,会话不会消失,会话状态仅在支持 cookie 的浏览器中保留。

SEESION  COOKIE设计模式(原理):

1、生成随机字符串

2、将随机字符串保存在本地COOKIE 当中

3、在服务器保存 SEESION

4、在SEESION 当中写上 随机字符串对应的 字典内容 --- 键值对

Django SEESION 自动执行上四内容

设置SESSION

request.session['Key'] = Value  ( Value 一般是 1 个字典对象 )

获取SESSION

request.session['Key'] 
或request.session.
get('key',None)  推荐用 此方法
获取SESSION所有 键、值、键值对

 request.session.keys()
request.session.values()
request.session.items()
 request.session.iterkeys()
request.session.itervalues()
 request.session.iteritems()

删除SESSION

方法1:删除单个
del request.session['Key']

方法2:删除所有  

request.session.clear() 一般注销用户,用这个

它相当于:request.session.delete(request.session.session_key)

方法3:删除所有的Session (超时时间,默认为2周) 一般用作 xxx周内免登录
request.session.set_expiry(value)

该方法优先级大于默认的settings.py 配置

如果value是个整数,session会在些秒数后失效。单位秒

request.session.set_expiry(60*60)
如果value是个datatime或timedelta,session就会在这个时间后失效。
如果value是0,用户关闭浏览器session就会失效。
如果value是None,session会依赖全局session失效策略。

将所有Session失效日期小于当前日期的数据从Django数据库中删除
request.session.clear_expired()

获取SEESION 生成的COOKIE 随机字符串

request.session.session_key

设置SESSION 过期时间

settings.py 模块中设置---新增 ,删除本地信息
SESSION_EXPIRE_AT_BROWSER_CLOSE=True         浏览器关闭时过期(默认(不设置)为Flase)
SESSION_COOKIE_AGE=
60                               设置固定时间过期 (默认(不设置为)2周,单位为秒)

SESSION 其他配置 通用配置

以下内容需要在settings.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,默认修改之后才保存(默认) 推荐设置True,只要用户有操作,就应该保存,让超时时间为用户最后一次操作时间

SESSION 储存位置 引擎配置

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中

还支持储存在 缓存,文件,等位置。

数据库

SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 数据库引擎(默认)

缓存 

配置 settings.py 
 SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 缓存引擎
 SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

文件

SESSION_ENGINE = 'django.contrib.sessions.backends.file' 

http://www.cnblogs.com/wupeiqi/articles/5246483.html

使用案例:

from django.shortcuts import render, redirect

#登录
def login(request):
    if request.method == 'POST':
        username = request.POST['user']
        pwd = request.POST['password']
        if username == 'lee' and pwd == '123':
            request.session['is_login'] = {'username':username}
            return redirect('/main/')            
        else:
            ret = {'ret':'用户名密码错误'}
            return render(request, 'login.html', ret)
    return render(request, 'login.html')

#首页
def main(request):   
    msg = request.session['is_login']
    if msg:
        return render(request, 'main.html', {'msg':msg})
    else:
        return redirect('/login/')

#退出    
def logout(request):
    del request.session['is_login']
    return redirect('/login/')

SESSION 和COOKIE 之间的关系:

  • SESSION:一般保存在远程服务器(数据库、内存、缓存)
  • COOKIE: 一般保存在本地
  • SESSION 默认存在 django_session 数据库表中
  • request.session['key']={ 'key1':'value1' }  中的key 为序列化且加密后cookie 
  • 一般情况下,浏览器禁用 cookie 后,session 也不可用

基于SESSION的用户登录验证:

def session_login(fun):                                    # 定义一个装饰器
    def check_session(request, *args, **kwargs):
        try:
            request.session.get('user_id')                 # 如果session 中含有 user_id
            res = fun(request, *args, **kwargs)            # 就允许登录
            return res
        except Exception as e:                        
            res = HttpResponseRedirect('/user/login')      # 否则就跳转到登录页面
            res.set_cookie('url',request.get_full_url)     # 并记录当前的访问页面到 cookie 当中
            return res
    return check_session

使用
@session_login

注意:http://127.0.0.1:8000/200/?type=10
          request.path :  表示当前路径/200/
          request.get_full_path( ) : 表示完整路径/200/?type=10

转载于:https://my.oschina.net/esdn/blog/822539

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值