Asp.Net基础 - 6.Cookie + 7.Session原理
6.Cookie
7.Session原理
7.1案例:用Session实现验证码。
6.Cookie
表单是和页面相关的,只有浏览器端提交了这些数据服务器端才能得到。而有时候希望在服务端任意的地方存取一些和访问者相关的信息,这时候就不方便将这些信息保存到表单中了,因为如果那样的话必须随时注意在所有页面表单中都保存这些信息。Cookie是和站点相关的,并且每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所有Cookie都提交给服务器,是强制性的。Cookie也是保存在浏览器端的,而且浏览器会在每次请求的时候都会把和这个站点的相关的Cookie提交到服务器,并且将服务端返回的Cookie更新回数据库,因此可以将信息保存在Cookie中,然后在服务器端读取、修改。服务器返回数据除了普通的html数据以外,还会返回修改的Cookie,浏览器把拿到的Cookie值更新本地浏览器的Cookie就可以。
案例:
cookie1.aspx
cookie1.aspx.cs
protected void Button1_Click(object sender, EventArgs e){Response.SetCookie(new HttpCookie("color",TextBox1.Text));//在客户端也能通过$.cookie取。服务端设置cookie}下面是第二个页面
cookie读2.aspx
cookie读2.aspx.cs
protected void Button1_Click(object sender, EventArgs e){Label1.Text = Request.Cookies["color"].Value;}
7.Session原理
Cookie不能存储过多信息。如果想保存大量的数据,可以保存一个Guid到Cookie中,然后在服务器中建立一个以Guid为Key,复杂数据为Value全局Dictionary。static字段对于不同用户也只有一份,因此用static实现多用户共享数据。代码见备注※。
变量1.aspx
变量1.aspx.cs
public partial class 变量1 : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e){//给cookie为MySessionId赋值,guidif (Request.Cookies["MySessionId"] == null){string sessionId = Guid.NewGuid().ToString();Response.Cookies["MySessionId"].Value = sessionId;}}//设置sessionprotected void Button2_Click(object sender, EventArgs e){string sessionId = Request.Cookies["MySessionId"].Value;IDictionary<string, object> session = SessionMgr.GetSession(sessionId);session["服务端的数据"] = 3333;}//读取sessionprotected void Button1_Click(object sender, EventArgs e){string sessionId = Request.Cookies["MySessionId"].Value;IDictionary<string, object> session = SessionMgr.GetSession(sessionId);Label1.Text = session["服务端的数据"].ToString();} }SessionMgr.cs
public class SessionMgr {public SessionMgr(){//// TODO: 在此处添加构造函数逻辑// }private static IDictionary<string, IDictionary<string, object>> data =new Dictionary<string, IDictionary<string, object>>();public static IDictionary<string,object> GetSession(string sessionId){if (data.ContainsKey(sessionId)){return data[sessionId];}else{IDictionary<string ,object> session = new Dictionary<string, object>();data[sessionId] = session;return session;}} }ASP.Net已经内置了Session机制,把上面的例子用ASP.NetSession重写。不要放太多的对象到Session,Session会有超时销毁的机制,发帖(服务器不可能知道浏览器是否在开着,什么时候关闭),发帖计时,在线时间统计,靠请求来判断是否活着。Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session、Cookie)。不能放太大的数据,放的数据是object。
7.1案例:用Session实现验证码。
HttpHandler要能够操作Session,要实现IRequiresSessionState接口。为什么每次点击值都变化?很正常,因此每次页面点击页面都会刷新,就向ashx重新请求图片,ashx的ProcessRequest都会执行。正常网站登录成功就进入主页面,没机会让你看到变化,但是一旦输入错误也是变化。
1.创建YZM.ashx
<%@ WebHandler Language="C#" Class="YZM" %>using System; using System.Drawing; using System.Web; using System.Web.SessionState;//HttpHandler使用Session要调用IRequiresSessionState接口 public class YZM : IHttpHandler, IRequiresSessionState {public void ProcessRequest(HttpContext context){context.Response.ContentType = "image/JPEG";using (Bitmap bitmap = new Bitmap(50, 30)){using (Graphics g = Graphics.FromImage(bitmap)){//随机的验证码Random ran = new Random();int code = ran.Next(1,9999);string strCode = code.ToString();//写到Session里HttpContext.Current.Session["Code"] = strCode;g.DrawString(strCode,new Font("微软雅黑",12),Brushes.Wheat,new PointF(0,0));bitmap.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);}}}public bool IsReusable{get{return false;}}}2.创建页面
<body><form id="form1" runat="server"><div><img src="YZM.ashx"/>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></div></form> </body>3.在验证码验证.aspx.cs代码里写
protected void Button1_Click(object sender, EventArgs e){string yzm = Convert.ToString((Session["Code"]));if (yzm == TextBox1.Text){Response.Write("正确");}else{Response.Write("错误");}}点击图片产生新的验证码。 <img src="YZM.ashx" onclick="this.src='YZM.ashx?aaa='+new Date()" />每次点击都
生成一个新的地址,让浏览器去请求。在AJAX中还会用。
Asp.Net基础 - 6.Cookie + 7.Session原理相关推荐
- 网络:.cookie和session原理及区别
一.Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料 ...
- cookie和session原理
session session_start() 开启session机制,告诉php我想使用session了 列: $_SESSION['age']='18'; $_SESSION[ ...
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
小论坛地址: http://rayyu.5d6d.com/thread-9444-1-1.html 正文: 首先 session 和 cache 拥有各自的优势而存在. 他们的优劣就不在这里讨论了. ...
- cookie与session原理详解
一. Cookie cookie:浏览器在电脑硬盘中开辟的一块空间,主要供服务器端存储数据. cookie中的数据是以域名的形式进行区分的. cookie中的数据是有过期时间的,超过时间数据会被浏览器 ...
- ASP.NET基础培训 - Cookie的正确利用
Cookies有很多名字,HTTP Cookie, Web Cookie, Browser Cookie, Session Cookie等. 在网站开发的过程中,很多初学者其实滥用了它. 它的正确意义 ...
- Python接口自动化之cookie、session应用
------·今天距2021年260天·------ 这是ITester软件测试小栈第112次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请 ...
- python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用
------·今天距2021年260天·------ 这是ITester软件测试小栈第112次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请 ...
- cookie和session常见问题
1.cookie和session原理及区别 cookie采用的是客户端的会话状态的一种储存机制.session是一种服务器端的信息管理机制,它把这些文件信息以文件的形式存放在服务器的硬盘空间上 (这是 ...
- python客户端修改session_Python接口自动化之cookie、session应用
介绍了post源码,data.json参数应用场景及实战. 以下介绍cookie.session原理及在接口自动化中的应用. HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个 ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...
最新文章
- singleton设计模式_让我们研究一下Singleton设计模式的优缺点
- Daydream VR
- linux smb 启动失败,[已解决]windows能看到smb,但是打不开
- 娱乐大咖项目2- 总结
- SQL DATEADD (Transact-SQL)根据需要返回时间,
- c语言数组蛇形编程,C语言每天小练(二)——蛇形数组
- 谁动过你的电脑?小姐姐们要学会保护好自己电脑里的小秘密呀
- c语言课程设计做科普,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
- sklearn计算准确率,召回率,精确率,F1函数
- 微信小程序字符头像,自定义任意字符头像,字符图片,avatar,利用minui
- Python概念-Item系列(林海峰教的)
- 强大!HTML5 3D美女图片旋转实现教程
- 树莓派CM4的6路串口测试
- 三星海外远程真机调试使用教程
- 九宫格拼图游戏初版(练练手)
- 声音大小与振幅的关系_物理知识问答-响度与振幅的关系是什么?
- #java读书笔记#基础知识
- 微信公众平台开发(92) 多客服(转)
- 移动互联网数据分析 移动客户端流量统计 移动客户端数据统计(二)
- c++中类模板与结构体模板总结