python中session()是干什么作用的_cookies和sessions简介+简单案例(基于Python的Django框架),入门,介绍,python,django...

cookie和session是干什么的

浏览器访问页面基于HTTP协议(超文本传输协议),而

HTTP协议是无状态的

,也就是说,下一次去访问一个页面时不知道上一次对这个页面做了什么。

所以,我们就需要cookie和session这两种方式来

状态保持

cookie

认识cookie

cookie是由服务器生成,

存储在浏览器端

的一小段文本信息

打个通俗的比方:

小明(浏览器)找老板(服务器)买豆浆,老板给小明一个单子(设置cookie),小明先保管一会单子(保存cookie),再用单子找老板要豆浆(读取cookie)

296b028f9a9828f3c4abe2698e8b4fc4.png

cookie的特点:

键值对

方式存储

通过浏览器访问一个网站时,会将浏览器存储的跟该网站相关的所有cookie信息(

request.COOKIES

)发送给该网站的服务器

cookie是基于域名安全的,浏览器访问一个网站时,只会把跟该网站相关的cookie信息发送给该网站的服务器,而不会发送和其他网站相关的cookie信息

cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期

注:request.COOKIES是一个标准的python字典,包含与要访问的网站相关的所有的cookie,键和值都为字符串

cookie的简单使用

话不多说,上代码举栗子

set_cookie页面设置cookie信息num=1,get_cookie页面读取cookie信息num=1

# 设置cookie信息

def set_cookie(request):

response = HttpResponse('设置cookie')

# 为浏览器设置一个cookie信息 可以set多次设置多个cookie

response.set_cookie('num',1)

return response

# 获取cookie信息

def get_cookie(request):

# 取出cookie num的值

num = request.COOKIES['num']

return HttpResponse(num)

划重点:

设置cookie需要一个HTTPResponse类或其子类(HTTPResponseRedirect、JsonResponse)的对象set_cookie方法

浏览器发给服务器的cookie保存在request对象的COOKIES中

刚才说到cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期。现在就来说一下

设置cookie的期限

第一种方法:在set_cookie方法中设置属性max_age,表示有效期的时间长度,以秒为单位

response.set_cookie('num',1,max_age=14*24*3600) # 两个星期

第二种方法:在set_cookie方法中设置属性expires表示过期的时间节点

from datetime import datetime,timedelta

response.set_cookie('num',1,expires=datetime.now()+timedelta(days=14)) # 两个星期

登录案例:cookie记住用户名

目标:如果用户第一次登录时勾选“记住用户名”并登录成功,那么用户在不关闭浏览器的情况下再返回登录页面,用户名回显在对应的输入框中

核心语句:

response.set_cookie('username', username)

设置cookie,

username = request.COOKIES['username']

获取cookie并渲染模板,html文件中相应的

用户名:

接收变量

login.html

登录页面

用户名:

密码:

记住用户名

django项目应用下的views.py

# 显示登录页面

def login(request):

# 获取cookie username

if 'username' in request.COOKIES:

# 获取记住的用户名

username = request.COOKIES['username']

else:

username = ''

return render(request, 'login/login.html',{'username':username})

# 获取提交的用户名和密码

def login_check(request):

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

password = request.POST.get('password')

remember = request.POST.get('remember')

# 进行登录校验

# 实际开发中根据用户名和密码查找数据库 此处用admin和123代替

if username=='admin' and password=='123':

# 用户名密码正确 跳转到首页

response = redirect('/index')

# 判断是否需要记住用户名

if remember == 'on': # 复选框的值 选中为on 不选中为None

# 设置cookie

response.set_cookie('username', username)

return response

else:

# 用户名密码错误 跳转到登录页面

return redirect('/login')

session

认识session

session是由服务器生成,并

存储在服务器端

的一小段文本信息

再打个通俗的比方:

小明(浏览器)去办健身卡,个人信息都保存在健身房(服务器)内,健身房给小明一个卡号(cookie sessionid),下次小明去健身房只要报卡号就可以

01e2d4cc4d41346c3a0a1ab5ab622448.png

其中,django_session表存在服务器端的数据库中:

session_key

session_data

唯一标识码 sessionid

{‘username’:admin, ‘age’:20}

特点:

键值对

存储

依赖于cookie,唯一的标识码保存在cookie的sessionid中

有过期时间,如果不指定,默认两周后过期

session的简单使用

设置session:request.session[‘key’] = value

获取session:request.session[‘key’] 或 request.session.get(‘key’,default)。对于get方式,如果session中没有找到’key’,则返回指定默认值default。

清除所有session的值,保留键:request.session.clear()

清除所有session的键值对:request.session.flush()

删除session中的指定键值对:del request.session[‘key’]

设置session的过期时间:request.session.set_expiry(value)。如果value是一个整数,session_id cookie将在value秒后过期;如果value为0,session_id cookie将在浏览器关闭时过期;如果value为None,session_id cookie将在两周之后过期。

登录案例:session记住登录状态

还是在刚才登录那个栗子的基础上,加上session后的目标:用户第一次登录成功进入首页之后,无论关不关闭浏览器,两个星期内用户再次访问登录页面时,会直接跳转到首页

核心语句:

request.session['islogin'] = True

记住用户的登录状态,

request.session.has_key('islogin')

判断用户是否登录,只要session中有islogin就认为用户已经登录

django项目应用下的views.py

# 显示登录页面

def login(request):

# 判断用户是否登录

if request.session.has_key('islogin'):

# 若用户已登录 直接跳转到首页

return redirect('/index')

else:

# 获取cookie username

if 'username' in request.COOKIES:

# 获取记住的用户名

username = request.COOKIES['username']

else:

username = ''

return render(request, 'login/login.html',{'username':username})

# 获取提交的用户名和密码

def login_check(request):

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

password = request.POST.get('password')

remember = request.POST.get('remember')

# 进行登录校验

# 实际开发中根据用户名和密码查找数据库 此处用admin和123代替

if username=='admin' and password=='123':

# 用户名密码正确 跳转到首页

response = redirect('/index')

# 判断是否需要记住用户名

if remember == 'on':

# 设置cookie

response.set_cookie('username',username)

# 记住用户的登录状态 只要session中有islogin就认为用户已经登录

request.session['islogin'] = True

return response

else:

# 用户名密码错误 跳转到登录页面

return redirect('/login')

cookie和session的对比及应用场景

区别和联系:

两者都以键值对存储

cookie存储在浏览器端,session存储在服务器端

cookie取出的都是字符串类型,session取出的类型和存入的类型一致

两者都有过期时间,也都可以指定,但如果不指定,cookie默认关闭浏览器之后就会过期,session默认两周后过期

session依赖于cookie,其唯一的标识码保存在cookie的sessionid中

应用场景:

cookie:安全性要求不高的数据,如记住用户名

session:涉及到银行卡账号密码之类的安全性要求较高的数据,如记住登录状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值