zoukankan      html  css  js  c++  java
  • Session和Cookie,Django的自动登录机制

    什么是Cookie?

    Cookie是浏览器的本地存储机制,存储服务器返回的各种信息,下次发起请求时再发送给服务端,比如访问baidu

     什么是Session?

    刚才说道,Cookie存储服务端返回的信息,下次请求时再带回给服务端,那如果能够存储用户名密码不就可以实现自动登陆了么?实际上,这种方式存在安全隐患,别人可以到你的电脑上通过查询你的Cookie就可以得到你的用户信息,于是Session机制应运而生。

    Sessin由服务端生成并存储在数据库中,包括session_key,session_data,expire_date,其中session_key又叫sessionid,是一串随即字符串,服务端response时如果浏览器提交的request没有sessionid,那么服务端就会返回一个sessionid给浏览器,浏览器存储在Cookie中,session_data用加密方式存储了用户的基本信息,包括用户名、密码、字段信息等,expire_data是过期时间,默认两周。我们看看django中的session数据库

    什么是自动登录?如何实现?

    先看一段template代码

    我们在template中判断如果request中有user对象且已经认证过了,我们显示一个页面;

    否则就显示另一个页面

    所以,自动登录的核心就是request中要有user对象,那怎么才能自动把user加入request中呢?

     

    Django的sessions app会自动拦截request和response,根据浏览器request的sessionid找到对应的session_data,解密生成user对象加入request中,当服务器response时,服务端如果发现request中没有sessionid,就会返回一个sessionid给浏览器存储,session是在哪儿生成的呢?

    记得login(request,user)函数吗?login在验证成功后会根据传进来的user对象生成session,并将sessionid放入request中,render(request,"index.html")时就会返回给浏览器。

  • 相关阅读:
    oracle基本语句
    html页面比较长,如何用js实现网页一打开显示在网页的中部?
    idea拉出Output窗口和还原窗口
    关于idea的目录结构如何变成树状,也就是横向变纵向
    IDEA -- idea无法导入HttpServlet包解决方法
    tomcat启动startup.bat一闪而过
    li标签和checkbox绑定
    利用jQuery对li标签操作
    &#65279导致页面顶部空白一行解决方法
    Myeclipse快速排版的快捷键
  • 原文地址:https://www.cnblogs.com/Peter2014/p/8601205.html
Copyright © 2011-2022 走看看