cookie:

保存在浏览器上的一组键值对, 是由服务器让浏览器进行设置的

下次浏览器访问的时候会携带cookie.

request是客户端请求, response是服务端响应.

读取客户端的cookie要用request, 写入客户端cookie要用response

登录成功后,服务器使用response写入cookie到客户端浏览器

为什么会有cookie ?

因为Http协议是无状态保存,每次请求都是无关联的,没有办法保存状态

所以使用cookie保存状态.

在django中的操作

设置: response对象.set_cookie(key,value,max_age超时时间=5秒) 本质就是写响应头

获取: request.COOKIES[key] 或者 request.COOKIES.get(key) 本质就是请求头

删除: response.delete_cookie(key) 把key设置为空,超时时间为0

加盐设置: response对象.set_signed_cookie(key,value,max_age=5,salt="xxx")

获取:request.get_singed_cookie(key,salt="xxx",default="")

session:

保存在服务器上的一组键值对,依赖于cookie.

session是服务器端技术,利用这个技术,服务器在运行的时候可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器web资源的时候,可以把各自的数据放在各自的session中,当用户再去访问该服务器中其他web资源的时候,其他web资源从各自的session中取出数据.

为什么要有session?

cookie保存在浏览器本地,不安全, session是存在服务器上的

cookie有长度限制

session给cookie一把钥匙, cookie只存钥匙. 通过钥匙,进入session的仓库取东西

django中的操作:

设置session值:

request.session[key] = value 例如:request.session["session_name"] = "admin" ***

request.session.setdefault(key,value)

获取session值:

request.session[key] 例如:session_name = request.session["session_name"] ***

request.session.get(key)

删除session值:

del request.session[key] 删除一个session信息

例如: del request.session["session_name"] ***

request.session.flush() 删除所有的session信息和cookie (把保存session的箱子删除) ***

request.session.delete() 删除所有的session信息,不删除cookie

其他

request.session.set_expire(value) 设置超时时间

request.session.clear_expired() 清除过期的 将所有session失效日期小于当前日期的数据删除

session的配置:

from django.conf import global_settings, settingsfrom django.contrib.sessions.backends import db

django默认支持session, 并且把session的数据存在数据库中,就是django_session表里

配置settings.py

SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 Session的cookie失效日期(2周)(默认

SESSION_COOKIE_NAME="sessionid" 保存在浏览器上的

SESSION_SAVE_EVERY_REQUEST=False 是否每次请求都保存Session,默认修改之后才保存(默认)

SESSION_ENGINE= 'django.contrib.sessions.backends.db' 引擎(默认) SESSION 的存储的位置

SESSION_COOKIE_PATH = "/" Session的cookie保存的路径(默认)

    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)

在login_session视图函数中,认证成功之后,执行了什么步骤?

a. 生成一个随机字符串 sessionid=u1sa9vhqpctcf8tudb6j17rzlbibeykz

b. django_session表中生成一条记录

浏览器只有session_key, 而找不到session_data.

用户的信息都是在session_data里面存的.

比如:

session_data原始数据是这样的{"is_login":True,"username":"xiao","login_time":"2018-07-04 11:49:52"}

存表时,做加密存储

c. 响应体.set_cookie("sessionid","u1sa9vhqpctcf8tudb6j17rzlbibeykz ")

解释:

a. django通过随机算法,计算出一个字符串

b. request.session,这里存的是一个字典. 在login_session中存了3个键值对. 比如:{"is_login":True,"username":"xiao","login_time":"2018-07-04 12:49:52"}

存储表的时候:

session_key对应随机字符串, 它表示一个钥匙, 用来从django_session表中取值

session_data 它是将字典序列化之后, 加密进行存储. 注意:key的值必须是字符串, 否则无法序列化

expire_date是在当前基础上,加14天

c. 响应体, 就是服务器返回给浏览器的. 响应体.set_cookie,表示设置一条cookie

sessionid这个名字是固定的,对应的是django_session表中的session_key

一台电脑的一个浏览器,对应django_session表中的唯一一条记录

在index_session视图函数中,认证成功之后, 是如何渲染的​?

a. 获取随机字符串sessionid u1sa9vhqpctcf8tudb6j17rzlbibeykz

b. 在服务器的django表中查询session_key=u1sa9vhqpctcf8tudb6j17rzlbibeykz 的记录

使用ORM查询

obj= django.session.objects.filter(session_key=..........).first()

c. 获取session值

request.session.get("username")

request.session.get("pwd")

cookie 和 session 的设置 登录 注销 练习

from django.shortcuts import render,redirect,HttpResponse
import datetime
# Create your views here. # cooike
def index(request):
print(request.COOKIES)
is_login=request.COOKIES.get("is_login") #从cookie中获取登录状态
if not is_login: #判断登录状态是false
return redirect("/login/") #302从定向到登录页面 username = request.COOKIES.get("username")
login_time = request.COOKIES.get("login_time") #获取cookie中的登录时间
return render(request,"index.html",{"username":username,"login_time":login_time}) def login(request):
if request.method == "POST":
user = request.POST.get("username")
pwd = request.POST.get("password")
if user=="xiao" and pwd=="":
obj = redirect("/index/") #重定向到登录页面
obj.set_cookie("is_login",True)#cookie设置登录状态
obj.set_cookie("username",user)#cookie设置用户名
#获取当前时间
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%I:%S")
obj.set_cookie("login_time",now) #cookie设置登录时间
return obj
return render(request,"login.html") # session
def login_session(request):
if request.method == "POST":
user = request.POST.get("username")
pwd = request.POST.get("password")
if user == "alex" and pwd =="":
# 写session
request.session["is_login"] = True #session设置登录状态
request.session["username"] = user #session设置用户名
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%I:%S")
request.session["login_time"]=now
return redirect("/index_session/") #302重定向到首页
return render(request,"login.html") def index_session(request):
is_login = request.session.get("is_login") #从session中获取登录状态
if not is_login: #判断是不是true
return redirect("/login_session/") username= request.session.get("username") #从session中获取用户名
login_time = request.session.get("login_time") #从session中获取登录时间
return render(request,"index.html",{"username":username,"login_time":login_time}) #注销
def logout(request):
request.session.flush() #清理session
return redirect("/login_session/")

cookie 和 session 设置的更多相关文章

  1. Flask中cookie和session设置与csrf原理攻防

    Flask之操作cookie app.py from flask import Flask, request, Response app = Flask(__name__) @app.route('/ ...

  2. flask中cookie和session设置

    flask中cookie和session介绍   一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户. ...

  3. Laravel5 cookie和session设置

    Cookies Laravel会加密所有已创建的cookie信息,并附加上授权码,当客户端擅自修改cookie信息时,该cookie将被废弃,从而保证安全性. 获取一个指定的cookie值 $valu ...

  4. Laravel5 cookie和session设置 Cookie::queue()自动添加

    Cookies Laravel会加密所有已创建的cookie信息,并附加上授权码,当客户端擅自修改cookie信息时,该cookie将被废弃,从而保证安全性. 获取一个指定的cookie值 $valu ...

  5. 封装对Cookie和Session设置或取值的类

    public class CookieHelper : System.Web.SessionState.IReadOnlySessionState    { public static void Se ...

  6. 【转】Cookie和Session区别和联系详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  7. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  8. 关于cookie的文章(cookie与session机制)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  9. 理解Cookie和Session机制

    转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...

随机推荐

  1. 使用aws和tomcat搭建服务器过程中的一些坑.

    在国外没啥事做, 考前也不愿意复习, 看到aws能免费试用一年, 于是就试着搞了搞, 就准备搭建个个人网站玩玩. aws的注册与创建实例 首先个人感觉这个东西使用起来还是很方便的, 一开始注册完验证完 ...

  2. sql server DateTime与DateTime2的区别

    DateTime字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fff ,3个f,精确到1毫秒(ms),示例 2014-12-03 17:06:15.433 .DateTime2字段 ...

  3. python 识别身份证号码

    # !/usr/bin/python # -*-coding:utf-8-*- import sys import time time1 = time.time() from PIL import I ...

  4. C#数字图像处理时注意图像的未用区域

    原文:C#数字图像处理时注意图像的未用区域 图1. 被锁定图像像素数组基本布局         如图1所示,数组的宽度并不一定等于图像像素数组的宽度,还有一部分未用区域.这是为了提高效率,系统要确定每 ...

  5. wpf VisualBrush 的使用,可创建重复图像

    VisualBrush 类(msdn) <Grid.Background> <VisualBrush TileMode="Tile" Viewport=" ...

  6. Android动画基础——属性动画(Property Animation)

    本篇涉及例子下载:Github 本篇讲android 3.0引入的属性动画框架,上篇写视图动画View Animation时就说过ViewAnimation的缺点,那就是动画作用的是view本身的视觉 ...

  7. MySQL 常用数据存储引擎区别

    mysql有多种存储引擎,目前常用的是 MyISAM 和 InnoDB 这两个引擎,除了这两个引擎以为还有许多其他引擎,有官方的,也有一些公司自己研发的.这篇文章主要简单概述一下常用常见的 MySQL ...

  8. Android零基础入门第61节:滚动视图ScrollView

    原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期 ...

  9. 使用VS2010开发Qt程序的4点经验(QT4到QT5的升级,更改sln文件,切换工程使用的Qt库,在VS的Solution Explorer视图中建立文件夹)

    导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手.其中最重要的一点是,有 ...

  10. jquery中的ajax应用集锦

    一,原生JS实现ajax: 1 2 3 4 5 6 7 8 9 10 11 function AjaxGet()         {             var xhrObj;           ...