服务器将登陆信息代码写到客户端(浏览器)cookie里面。第二次登陆直接带着cookie访问。 cookie是键值对形式。
session:
session建立会话,存在服务器里面,注销之前一直存在。
不动的话,过期了,重新登录,session有周期
服务器为每一个用户建立一个session对象,产生sessionid来识别,sessionID存在cookie里
存储用户名
总结:session是服务端保存的一个数据结构,用来跟踪用户状态,数据可以保存在集群、数据库、文件中。
cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现session的一种方式。
HTTP无状态的,tcp有状态,保证两方通信。
请求,响应周期短,一次请求一次响应。
将登陆用户信息保存在session中,展示在页面中
if len(bloguserset)==1: #将用户名放入session session=request.session session['username']=uname
页面取:session:{{request.session.username }}
不需跳转页面,session
默认周期:两周
注销,将session清空,或者把键清除。
def logout(request): session=request.session #session.clear()清除session,最好用pop #session.pop('username') 清除键 session.flush()#清空session return render(request,'login.html')
如果在django里写判断,格式:
def logout(request): session=request.session #session.clear() #session.pop('username') session.flush() return render(request,'success.html')
success 页面
----------欢迎访问博客管理系统-----
{% if request.session.username is not None %}#如果session不是空 欢迎{{ bloguser.userName }}<br> <a href="/blog/logout">注销</a>#出现注销页面 {% else %} <a href="/blog/login">登陆</a> #在点注销,跳转当前页面,因为session清空所以出现登录,点登陆调到登录页面
{% endif %}
思路:
例如淘宝:
直接登录后,什么页面都可以看了未直接登录,想看某个页面需要登录,登录完直接跳转这个页面,实现此功能
def a(request): if request.session.get('username') is not None: return render(request,'a.html') else: request.session['uri']=request.get_raw_uri()#记录一下之前想要想要访问页面的路径 return render(request,'login.html')
else思路:1、登录跳转success,再点a,直接跳转a页面
2、点a,如果之前登录,跳转a页面
3、没有登录点a,跳转登录页面,登录后默认跳转success页面,但是想直接访问a页面,加判断,是否有访问a页面的路径uri,
如果uri有值,就跳转a页面,如果没有值,就跳转success页面