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原理相关推荐

  1. 网络:.cookie和session原理及区别

    一.Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料 ...

  2. cookie和session原理

    session   session_start() 开启session机制,告诉php我想使用session了 列:     $_SESSION['age']='18';     $_SESSION[ ...

  3. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖

    小论坛地址: http://rayyu.5d6d.com/thread-9444-1-1.html 正文: 首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. ...

  4. cookie与session原理详解

    一. Cookie cookie:浏览器在电脑硬盘中开辟的一块空间,主要供服务器端存储数据. cookie中的数据是以域名的形式进行区分的. cookie中的数据是有过期时间的,超过时间数据会被浏览器 ...

  5. ASP.NET基础培训 - Cookie的正确利用

    Cookies有很多名字,HTTP Cookie, Web Cookie, Browser Cookie, Session Cookie等. 在网站开发的过程中,很多初学者其实滥用了它. 它的正确意义 ...

  6. Python接口自动化之cookie、session应用

    ------·今天距2021年260天·------ 这是ITester软件测试小栈第112次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请 ...

  7. python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用

    ------·今天距2021年260天·------ 这是ITester软件测试小栈第112次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请 ...

  8. cookie和session常见问题

    1.cookie和session原理及区别 cookie采用的是客户端的会话状态的一种储存机制.session是一种服务器端的信息管理机制,它把这些文件信息以文件的形式存放在服务器的硬盘空间上 (这是 ...

  9. python客户端修改session_Python接口自动化之cookie、session应用

    介绍了post源码,data.json参数应用场景及实战. 以下介绍cookie.session原理及在接口自动化中的应用. HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个 ...

  10. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...

最新文章

  1. singleton设计模式_让我们研究一下Singleton设计模式的优缺点
  2. Daydream VR
  3. linux smb 启动失败,[已解决]windows能看到smb,但是打不开
  4. 娱乐大咖项目2- 总结
  5. SQL DATEADD (Transact-SQL)根据需要返回时间,
  6. c语言数组蛇形编程,C语言每天小练(二)——蛇形数组
  7. 谁动过你的电脑?小姐姐们要学会保护好自己电脑里的小秘密呀
  8. c语言课程设计做科普,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  9. sklearn计算准确率,召回率,精确率,F1函数
  10. 微信小程序字符头像,自定义任意字符头像,字符图片,avatar,利用minui
  11. Python概念-Item系列(林海峰教的)
  12. 强大!HTML5 3D美女图片旋转实现教程
  13. 树莓派CM4的6路串口测试
  14. 三星海外远程真机调试使用教程
  15. 九宫格拼图游戏初版(练练手)
  16. 声音大小与振幅的关系_物理知识问答-响度与振幅的关系是什么?
  17. #java读书笔记#基础知识
  18. 微信公众平台开发(92) 多客服(转)
  19. 移动互联网数据分析 移动客户端流量统计 移动客户端数据统计(二)
  20. c++中类模板与结构体模板总结

热门文章

  1. PHP根据开始、结束时间:计算开始、结束时间占当月总天数的百分比
  2. Matlab2012b license失效解决办法
  3. 六石管理学:个人机器的开发环境也有硬性要求
  4. JAVA CLASS混淆工具:Allatori 简单试用
  5. LINUX下载ant源码并编译
  6. WP中Document的层次设计
  7. 全网首发:WINDOWS某些文件夹,提供管理员权限后也无法删除,正确解决办法
  8. 吃自己的狗食,用自己的产品——再谈华为芯片
  9. 纽微特反省:经常跑同一个客户,也没新东西看
  10. 某项目中,doubango与NAT服务器的冲突