设置cookie存活时间_Django之cookie、session、token

  • 客户端会话技术:cookie
  • 服务端会话技术:session
  • 自定义会话技术:token

一.cookie

cookie本身由服务器端生成,通过Response将cookie写到浏览器上,下一次再次访问时,浏览器会根据不同的规则自动携带cookie过来

#服务端设置cookie: 
response.set_cookie(key,value[,max_age=None,exprise=None)]
def set_cookie(request):

    response = HttpResponse("设置Cookie")  #这里response =redirct()或者response =render()也是可以的

    response.set_cookie('username', 'Rock')

    return response
"""
HTTP响应报文里面会有:set_cookie:username=Rock

"""
#服务端获取cookie:
request.GET.get(key,defaultvalue)
def get_cookie(request):

    username = request.COOKIES.get("username")

    return HttpResponse(username)

#要求浏览器删除cookie
def logout(request):

    response = redirect(reverse("app:login"))

    response.delete_cookie("content")

    return response

response.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)

key: cookie的name

value:cookie的值

max_age:cookie存活时间,单位是秒

expires:具体过期时间

path:cookie的访问路径,只有在某个路径下访问才带上该cookie

domain:域名,只有在某个域名下访问

secure:安全

httpoly:如果为True那么js就不能获取cookie

set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=True)设置加密的cookie,salt是秘钥,对value进行了加密处理

response.set_signed_cookie('content', uname, "Rock")

uname = request.get_signed_cookie("content", salt="Rock")

二. session

#session表里面有字段session_key、session_data、expire_date

#服务器设置session
def login(request):
    if request.method == "GET":

        return render(request, 'two_login.html')
    elif request.method == "POST":

        username = request.POST.get("username")

        request.session["username"] = username

        return HttpResponse("登录成功")


"""
HTTP响应报文里面会有:set_cookie:sessionid= 一串hash编码(这个是服务器帮你生成的)

session表里面的字段session_key: 一串hash编码
session_data : 混淆串 {"username": "jam"}

"""




#服务器获取session
def mine(request):

    username = request.session.get("username")

    return render(request, 'two_mine.html', context=locals())


#要求浏览器删除sessionid
response.delete_cookie('sessionid')

#删除session表里面的session_data
del request.session['username']



#session 和cookie 一起删
def logout(request):

    response = redirect(reverse('two:mine'))

    # del request.session['username']

    # response.delete_cookie('sessionid')

    # session cookie一起干掉
    request.session.flush()

    return response

django中启用SESSION

settings中

INSTALLED_APPS:'django.contrib.sessions'

MIDDLEWARE:'django.contrib.sessions.middleware.SessionMiddleware'

每个HttpRequest对象都有一个session属性,也是一个类字典对象

常用操作:

get(key,default=None) 根据键获取会话的值

clear() 清楚所有会话

flush() 删除当前的会话数据并删除会话的cookie

delete request['session_id'] 删除会话

session.session_key获取session的key

设置数据 :

request.session[‘user’] = username

数据存储到数据库中会进行编码使用的是Base64

三. token

token一般只要是唯一就行,生成方法有很多种

class Student(models.Model):
    s_name = models.CharField(max_length=16, unique=True)
    s_password = models.CharField(max_length=128)
    s_token = models.CharField(max_length=256)




#以ip+时间戳+用户名来生成
def generate_token(ip, username):

    c_time = time.ctime()

    r = username

    return hashlib.new("md5", (ip + c_time + r).encode("utf-8")).hexdigest()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值