一、COOKIE

1、http协议建立连接后,无法保持状态;但实际情况,网站和服务器要进行通讯,需要“保持状态”,因此cookie应运而生:浏览器登陆web服务器后, Web 服务器产生包含有关用户的信息 (由名字=值(name = value)这样的信息构成的任意列表)保存在用户浏览器上的小文本文件;当浏览器再次访问时,自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了。

没有cookie会怎么样:在浏览器-设置-高级-内容设置-关闭允许在浏览器上存储cookie,浏览器将再也登陆不了系统

2、Cookie的通讯过程:

其中:(b)中的set-cookie就是服务器返回给浏览器的cookie信息,将保存在浏览器里;浏览器在(c)步访问服务器的时候,服务器便可以取浏览器的cookie信息识别他的身份

3、python 通过cookie实现用户认证:

服务器端views.py:def login(request):

  if(request.method == 'GET'):
    return render(request,'login.html')
  else:
    u = request.POST.get('username')
    pwd = request.POST.get('pwd')
  if dic['u']['pwd'] == pwd:
    res =redirect('index.html')
    res.set_cookie('username',u)
  return res
def index(request):
  v = request.COOKIE.get('
username')
  if v is not None:
    return render(request,'index.html')
  else:
    
return render(request,'login.html')

4、python 通过cookie实现客户端分页显示数据,客户端可选择每页显示几条数据(利用cookie),可实现上一页,下一页以及跳转到第几页。

服务器端views.py:

current_page = request.GET.get('p',1)#获取页码
current_page = int(current_page)
page_per_num = request.COOKIES.get('per_size',10)#获取每页显示的页码数量
page_per_num = int(page_per_num) tatol_data = models.Classes.objects.all().count()#计算总页数
v,a = divmod(tatol_data,page_per_num)
if a:
v+=1
if v<page_per_num+1:# 计算当前页显示的页码的起始,总页数小于每页要显示的数据个数
start = 1
end = v+1
else:
if current_page<int((page_per_num+1)/2)://限制页码的首端
start = 1
end = page_per_num+1+1
else:
if current_page+int(page_per_num/2)+1>v://限制页码的尾端
start = v-page_per_num
end = v+1
else:            //正常情况
start = current_page-int(page_per_num/2)
end = current_page+int(page_per_num/2)+1 str = ''#生产页码标签
if current_page==1://设置上一页
str += '<a class="a1" href="javascript:void(0)">上一页</a>'
else:
str+='<a class="a1" href="/app/Class/?p=%s">上一页</a>'%(current_page-1)
for i in range(start,end):
if i == current_page:
str=str+'<a class="a1 active" href="/app/Class/?p=%s">%s</a>'%(i,i)
else:
str = str+'<a class="a1" href="/app/Class/?p=%s">%s</a>'%(i,i)
if current_page==v://设置下一页
str += '<a class="a1" href="#">下一页</a>'
else:
str += '<a class="a1" href="/app/Class/?p=%s">下一页</a>' % (current_page + 1)
//设置跳转页码
jumps = ''' <input type='text'/><a onclick='jump(this,"/app/Class/?p=");'>Go</a>
<script>
function jump(ths,base){
var v=ths.previousSibling.value;
if(v<=%s&&v>=1)
location.href = base+v;
}
</script>
''' % v
str+=jumps
page_current_start = (current_page-1)*page_per_num#计算当前页显示的数据起始
page_current_end = (current_page)*page_per_num
class_list = models.Classes.objects.all()[page_current_start:page_current_end] return render(request, 'class.html', {'username': username,'class_list':class_list,'str':str}) 客户端:
<p>页码:</p>
{{ str|safe }}//设置按代码显示
<div>
<select id="p" onchange="changePageSize(this);">//选择每页显示的数据数量
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</div><script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>//使用jQuery.cookie操作cookie
<script>
$(function () {//页面加载完成自动选中select框的value值
v = $.cookie('per_size');
$('#p').val(v);
});
function changePageSize(ths) {//客户端选择后,设置cookie并刷新页面
value = $(ths).val();
$.cookie('per_size',value);
location.reload();
}
</script> 5、cookie使用总结(摘自网上)

  A、获取Cookie:

1
2
3
4
5
6
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
    参数:
        default: 默认值
           salt: 加密盐
        max_age: 后台控制过期时间

  B、设置Cookie:

1
2
3
4
5
6
7
8
9
10
11
12
13
rep = HttpResponse(...) 或 rep = render(request, ...)
 
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐',...)
    参数:
        key,              键
        value='',         值
        max_age=None,     超时时间
        expires=None,     超时时间(IE requires expires, so set it if hasn't been already.)
        path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
        domain=None,      Cookie生效的域名
        secure=False,     https传输
        httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

<script src='/static/js/jquery.cookie.js'></script>
$.cookie("list_pager_num"30,{ path: '/' });

 

二、SESSION(摘自网上)

cookie弥补了http无状态的不足,让服务器可以保持连接;但是cookie以文本的形式保存在本地,数据不安全;所以引入了session,但是只是单单的session也不好用,必须session+cookie配合:通过cookie识别不同的用户,对应的在session里保存私密的信息以及超过4096字节的文本。

1、基本操作(需要掌握的)

1、设置session值
    request.session["session_name"]="admin"
2、获取session值
    session_name = request.session("session_name")
3、删除session值
    del request.session["session_name"] 删除一组键值对
    request.session.flush() 删除一条记录
4、检测是否操作session值
    if "session_name" is request.session:

其他操作

5、get(key, default=None)

fav_color = request.session.get('fav_color', 'red')

6、pop(key)

fav_color = request.session.pop('fav_color')

7、keys()

8、items()

9、setdefault()

10、flush() 删除当前的会话数据并删除会话的Cookie。
这用于确保前面的会话数据不可以再次被用户的浏览器访问
例如,django.contrib.auth.logout() 函数中就会调用它。 11 用户session的随机字符串
request.session.session_key # 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired() # 检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key") # 删除当前用户的所有Session数据
request.session.delete("session_key") request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。

Cookie和session的简单理解和应用的更多相关文章

  1. php COOKIE和SESSION的一些理解

    web服务器是基于http协议的,而http协议是无状态的,导致任意两个请求之间没有联系.但是我们登录网站后,它却能记住我们的身份,这个过程中一定使用了某个标识来区别我们的身份.对于简单数据传输的我们 ...

  2. 对Cookie和Session的深入理解

    session对象 session对象用于存储特定的用户会话所需的信息 . Session对象的引入是为了弥补HTTP协议的不足.HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端 ...

  3. cookie和session的个人理解

    这是我学习后的个人理解  欢迎提点 如果说的不是很正确请纠正 COOKIE: 1.服务端给浏览器客户端返回一个编号(COOKIE值) 2.这个值存在浏览器中,接下来浏览器再次访问我的时候,会把这个值带 ...

  4. flask的cookie和session的简单原理

    在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例 在我们登陆的时候会有之前在购物车存放的物品.也就是说在一个地方为我们保存 ...

  5. 12月13日 什么是help_method,session的简单理解, find_by等finder method

    helper_method Declare a controller method as a helper. For example, helper_method :link_to def link_ ...

  6. JSP内置对象的cookie和session实现简单登录界面

    创建一个index.jsp页面 <%@ page language="java" contentType="text/html; charset=utf-8&quo ...

  7. cookie 和session的简单比较

    1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗   考虑到安全应当使用session ...

  8. Cookie和Session得使用理解

    Cookie 饼干 什么是Cokkie? 1.Cookie 翻译过来是饼干的意思. 2.Cookie 是服务器通知客户端保存键值对的一种技术. 3.客户端有了 Cookie 后,每次请求都发送给服务器 ...

  9. Python + request接口测试中Cookie和Session的获取和使用

    Cookie和Session的简单理解  由于Http协议是无状态的,所以产生了cookie和session进行状态的管理. 从哪里来,在哪里,到哪里去: --> Cookie是由服务端生成,存 ...

随机推荐

  1. SQL Server 使用分区函数实现查询优化

    在项目中遇到一个需求,需要在商家收藏信息中,获取到该商家发布的最新一条商品的发布时间,需求很简单,SQL语句也不复杂, select T_UserCollectMerchant.CollectID,T ...

  2. 【bzoj3033】太鼓达人 DFS欧拉图

    题目描述 给出一个整数K,求一个最大的M,使得存在一个每个位置都是0或1的圈,圈上所有连续K位构成的二进制数两两不同.输出最大的M以及这种情况下字典序最小的方案. 输入 一个整数K. 输出 一个整数M ...

  3. 【bzoj4129】Haruna’s Breakfast 带修改树上莫队+分块

    题目描述 给出一棵树,点有点权.支持两种操作:修改一个点的点权,查询链上mex. 输入 第一行包括两个整数n,m,代表树上的结点数(标号为1~n)和操作数.第二行包括n个整数a1...an,代表每个结 ...

  4. HDU4370:0 or 1(最短路)

    0 or 1 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4370 Description: Given a n*n matrix Cij (1< ...

  5. 使用HTML实现对汉字拼音的支持

    <!DOCTYPE HTML><html> <head> <meta charset="utf-8"> <title>无 ...

  6. SQL优化单表案例

    数据准备: -- 创建数据库 mysql> create database db_index_case; Query OK, row affected (0.00 sec) -- 查看数据库 m ...

  7. js实现日历

    有这样一个普通的日历需求 第一反应就是找插件,结果找到了,但是改起来非常麻烦,然后查下实现的原理,发现原来很简单,于是自己实现了一个. 首先分析一下这个组件,每页显示的是 当前月的所有日期及所占据的行 ...

  8. ios 全方位修改工程名

    本文针对于彻底修改iOS工程名,不需要另外建工程,会整理的跟新工程完全一样 1. 选中旧工程名,改为新的 然后选择rename 2. 依次选择黄色文件夹,修改名字,千万不要在Xcode外修改!!! 修 ...

  9. 【转载】字符串最小表示法-O(n)算法

    原博客链接:http://blog.csdn.net/zy691357966/article/details/39854359 未授权,侵权删. 因为这篇博客写得真好..转载了.. 红色的字是原博主写 ...

  10. USACO_1.1_Greedy_Gift_Givers_(模拟+水题)

    描述 http://train.usaco.org/usacoprob2?a=y0SKxY0Kc2q&S=gift1 给出不超过$10$个人,每个人拿出一定数量的钱平分给特定的人,求最后每个人 ...