Cookie与Session的一些总结
一、Cookie:
Cookie主要存储一些不敏感的数据,只能存储字符串类型
执行过程:
(1)第一次请求:
客户端将数据(比如用户名)以请求报文的形式请求服务器端响应,
服务器端得到数据(用户名),
如果登录成功则用Cookie保存在客户端上,Cookie创建并赋值如下:
HttpCookie cookie = new HttpCookie("键","值");
Response.Cookies.Add(cookie);
也可以通过浏览器发过来的请求报文来获得Cookie对象:
HttpCookie Cookie = context.Request.Cookies[Kits.ID];
(2)第二次请求:
这样就可以满足需求,当用户再次请求页面时,就可以对用户Cookie的判断,
来预先填充一些数据。
Cookie的取值代码如下:
Request.Cookies["键"].Value.ToString();
Cookie 可以设置过期的时间(设置Cookie为硬盘Cookie):
cookie.Expires = DateTime.Now.AddHours();
判断Cookie是否存在(判断获得的Cookie对象是否为空)
if(Request.Cookie["键"]==null){ }
二、Session:
要实现Session功能,必须实现System.Web.SessionState.IRequiresSessionState 标记接口
Session的存在也是为了免去用户重复性的去输入一些数据,
不同的是Session可以存储一些数据敏感的数据(Pwd,密码),可以是任意类型的,
这样就可以实现免登陆(用户登录一次之后,如果不退出浏览器,第二次可直接进入主页),
执行过程:
(1)第一次请求
浏览器将数据通过请求报文的形式,请求服务器端响应,
服务器判断用户名密码是否正确,
正确之后,用Session保存数据,代码如下:
存值,Session是以键值对形式存储的:
context.Session["键"]="值";
这一步是服务器端自动完成的,服务器会把Session存到Session池中,
Session池中对象的键(ASP.NET_SessionId)是随机生成的,
Session池中的值就是刚才存储的Session键值对,context.Session["Pwd"],
将ASP.NET_SessionId以Cookie形式返回,返回的Cookie是以缓存保存在浏览器端,
(2)第二次请求
在第一次请求后,浏览器已经获得了一个ASP.NET_SessionId,
在第二次请求时,会将ASP.NET_SessionId带到请求报文头中,
这样在执行aspx页面的管道事件的第9到第11个事件时,根据ASP.NET_SessionId
找到Session池中对应的Session对象,并将这个对象赋值给上下文对象context中。
Session的取值代码如下:
Context.Session["键"].ToString();
将Session清除的代码如下:
Context.Session.Abandon();
判断Session是否存在Session(判断获得的Session对象是否为空)
if(Context.Session["键"]==null){ }
三、可以使用Cookie与Session的组合来一些功能
(1)需求:用户登录一次页面成功之后,以后再登录其他页面时可以不用通过登录页面,
前提是只要不退出浏览器,一旦退出浏览器,用户需重新通过登录页面
这是通过Session来实现
登录成功后将查找到的用户名存到Session中:
context.Session["键"]="值";
以后每个页面首先判断Session是否存在:
if(Context.Session["键"]==null){ }
(2)需求:实现用户的7天免登录,
这是通过Session 与Cookie组合完成的
登录成功后将查找到的用户名存到Session中:
context.Session["键"]="值";
如果用户选择了免登录,因为Cookie不能存储用户敏感数据,
用Cookie记录当前用户的ID,并设置过期时间为7天,
HttpCookie cookie = new HttpCookie("键","值");
cookie.Expires = DateTime.Now.AddDays();
Response.Cookies.Add(cookie);
以后在判断完Session是否存在后,再判断用户 ID的Cookie是否存在,
如果Cookie存在,则取出ID,并在数据库中查找用户名赋值给Session,
stringID= Request.Cookies["键"].Value.ToString();
然后查询出用户名,
context.Session["键"] = "用户名";
(3)需求:登录成功之后,在每个页面上显示用户名
通过Session实现
在aspx前台页面上如下代码:
<%= Session["键"] %>
Cookie与Session的一些总结的更多相关文章
- Cookie和Session的总结
1.开篇 在之前学习这一段的时候我一直有点没弄清楚,其实对Session这块的理解还可以,但是Cookie感觉始终还是欠缺点火候.之后的很长一段时间都基本上很少用Cookie了,渐渐的也淡忘了这一块的 ...
- java的会话管理:Cookie和Session
java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...
- Cookie和Session的那些事儿
Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能.Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每 ...
- django的cookie和session以及内置信号、缓存
cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...
- Cookie和Session的区别
前言 HTTP是一种无状态的协议,为了分辨链接是谁发起的,就需要我们自己去解决这个问题.不然有些情况下即使是同一个网站我们每打开一个页面也都要登录一下.而Session和Cookie就是为解决这个问题 ...
- 本地数据Store。Cookie,Session,Cache的理解。Timer类主要用于定时性、周期性任务 的触发。刷新Store,Panel
本地数据Store var monthStore = Ext.create('Ext.data.Store', { storeId : 'monthStore', autoLoad : false, ...
- Cookie与Session
再说Cookie与Session之前,先要了解一下http协议. 何为http协议: http协议即超文本传输协议,一种基于浏览器请求与服务器响应的协议,该协议主要的特点就是它是一种无状态的协议(只针 ...
- 【转】Cookie和Session区别和联系详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- cookie 和session 的区别详解
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
随机推荐
- AJAX跨域调用相关知识-CORS和JSONP
1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常会遇到在一个页面的JS代码中,需要通过AJAX去 ...
- C++学习38 string字符串的增删改查
C++ 提供的 string 类包含了若干实用的成员函数,大大方便了字符串的增加.删除.更改.查询等操作. 插入字符串 insert() 函数可以在 string 字符串中指定的位置插入另一个字符串, ...
- C++学习21 基类和派生类的赋值
在C/C++中,经常会发生数据类型转换,例如整型数据可以赋值给浮点型变量,在赋值之前,先把整型数据转换为浮点型:反过来,浮点型数据也可以赋值给整型变量. 数据类型转换的前提是,编译器知道如何对数据进行 ...
- Java中Map的用法
Map的一般用法 1.声明一个Map : Map map = new HashMap(); 2 .向map中放值 ,注意: map是key-value的形式存放的,如: map.put("s ...
- JavaScript解耦记
有两个页面A.B.页面A调用页面B.B页面还通过异步加载方式包含一个javascipt(例如叫:ClassHeaderEvaluation.js)文件.问题场景:A页面通过异步请求方式请求B,并在B的 ...
- [SQL] 不知道是什么存储过程
CREATE PROCEDURE dt_DXS_STAFF_ACTIVE @STAFFSTATUS INT, @STAFFNUM INT, @STARTNO INT, @@TOTALCOUNT INT ...
- C Primer Plus(第五版)6
第 6 章 C 控制语句 : 循环 在本章中你将学习下列内容 已经多次学过,没怎么标注 · 关键字: for while do while · 运算符: < > >= <= ! ...
- 9.链式A+B
题目描述 有两个用链表表示的整数,每个结点包含一个数位.这些数位是反向存放的,也就是个位排在链表的首部.编写函数对这两个整数求和,并用链表形式返回结果. 给定两个链表ListNode* A,ListN ...
- [ZOJ 1002] Fire Net (简单地图搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002 题目大意: 给你一个n*n的地图,地图上的空白部分可以放棋 ...
- android项目中如何加载已有so库 <转>
1,在项目根目录下建立文件夹libs/armeabi文件夹 2,将so库放入 libs/armeabi文件夹 注意事项: 1,如果采用静态注册的方式请注意C文件中严格按照命名规则 Java_packa ...