cookie

cookie是什么?

存储在客户端浏览器(客户端硬盘)中的一段数据。

cookie的作用?

保存用户的状态信息。(会话跟踪)cookie的主要作用就是用来保存状态的。因为http协议是无状态的,所以要想保存用户的状态信息,必须自己来实现,可以通过cookie来实现。

cookie的特点:

1.保存的数据量大小有限制。
2.cookie可以设置有效期。当把有效期设置为已经过期的日期,那么浏览器就会删除这个cookie.
3.当cookie比较多的时候,浏览器可以自行决定删除某些cookie。
4.用户可以直接通过浏览器清除cookie,所以在程序员编程的时候不要太依赖cookie.
5.因为cookie是存储在客户端的,所有有安全性问题(不要存储密码)。
6.cookie是与域名相关的。所以在下次访问相同域名的网站的时候,浏览器会自动携带该域名下的cookie一起访问。
7.cookie是与浏览器相关的。
8.cookie中保存数据也是以键值对的方式来保存的。
9.如果写入了两个相同的键的cookie,那么后写入的会覆盖先写入的内容。
10.一般情况下,设置cookie,都必须设置有效期,如果不设置有效期,那么这个cookie就是一个浏览器进程内的cookie(在内存中的一个cookie),当以关闭浏览器,则cookie立即失效。 11.可以通过服务器端使用C#语言来写Cookie,也可以通过客户端JavaScript来写cookie,但是无论使用哪种方式,最终都是通过浏览器来操作的cookie。
网页广告总是与你浏览过的商品相似,就是使用了cookie HttpCookie UserName1 = Request.Cookies["userName"];
string val = UserName1.Value;//获取值 string userName = Request.QueryString["xtxName"];
//写入cookie
//1.创建对象
HttpCookie ck1 = new HttpCookie("userName",userName);
ck1.Expires = DateTime.Now.AddDays(7);//设置有效期7天
ck1.Path = "/";//设置在当前网站下的任何一个网页都能访问cookie
//把ck1加入到cookie集合中,将来当强求结束后,服务器会把cookies集合中的所有的cookie都发送给浏览器
Response.Cookies.Add(ck1);

会话跟踪技术

cookie  保存在客户端
session 保存在服务器,因此安全
Cookie和Session可以实现跨页面保存用户状态。通过跨页面保存用户状态,就可以跟踪用户访问的页面。

ViewState #

在同一个页面中保存用户状态信息,保存在客户端隐藏域

session

session是基于cookie。asp.net没有cookie,session也可以用
session是存储在服务端的,相对于cookie,session比较安全,但会增加服务器内存的负担
大多数情况下session依赖于cookie,第一次访问页面时,服务器把sessionId发送给浏览器,保存在
浏览器的cookie中,当访问session时,会把cookie里的sessionId发送给服务器找到session对象,因此
浏览器禁用cookie的话session也不能用,但可以通过web.Config配置来使session生效

实现真登录

写一个类继承自page类,因为每个页面都继承自page类
在page_PreInit()中判断session是否为空,这样每个页面再继承这个新类。这样就可以阻止未登录而直接访问页面
在一般处理程序中必须继承IRequiresSessionState接口才可以使用session
session降低系统的性能

模拟持久的sessionId

 if (Request["txtName"]!=null)
{
Session["userName"] = Request["txtName"];
//模拟持久的sessionId
HttpCookie cksid = new HttpCookie("ASP.NET_SessionId",Session.SessionID);
cksid.Expires = DateTime.Now.AddDays(7);
Response.Cookies.Add(cksid);
}

Session.Abandon();销毁session,放进session池。给下一个用户使用session
Session.Clear();清空session的值

验证码

后台代码

public void ProcessRequest (HttpContext context) {
//1.生成4位随机数
Random rnd = new Random();
string vc = rnd.Next(1000, 10000).ToString();
//把生成的验证码写到session里 CreateValidateGraphic(vc, context);
} public bool IsReusable {
get {
return false;
}
} /// <summary>
/// 创建验证码的图片
/// </summary>
/// <param name="containsPage">要输出到的page对象</param>
/// <param name="validateNum">验证码</param>
public void CreateValidateGraphic(string validateCode, HttpContext context)
{
Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(validateCode, font, brush, 3, 2);
//画图片的前景干扰点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
//保存图片数据
MemoryStream stream = new MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
//输出图片流
context.Response.Clear();
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(stream.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}

前端代码

 <form id="form1" action="valiCode.ashx" method="post">
<table border="1" cellpadding="2" cellspacing="2">
<tr>
<td>用户名:
</td>
<td>
<input type="text" name="txtLoginId" value="" /></td>
</tr>
<tr>
<td>密码:
</td>
<td>
<input type="password" name="txtPassword" value="" /></td>
</tr>
<tr>
<td>验证码:
</td>
<td>
<input type="text" name="txtValidCode" maxlength='4' value="" />
<img id='img1' src="valiCode.ashx" alt="图片验证码" />
<a href="#" onclick="document.getElementById('img1').src='valiCode.ashx?id='+Math.random()">看不清</a></td>
</tr>
<tr>
<td>
</td>
<td>
<input type="checkbox" name="chkRemember" value="true" />记住</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="登录" /></td>
</tr>
</table>
</form>

.net session_cookie简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. Selenium+pytest 页面对象模型框架

    下载地址:https://gitee.com/xiaopo1998/web_ui_test.git Selenium 页面对象模型框架使用说明 本框架基于 Selenium WebDriver 实现了 ...

  2. Mybatis-Plus中的@TableName 和 table-prefix

    简介 本文介绍Mybatis-Plus中的@TableName 和 table-prefix的使用. 介绍 在 MyBatis-Plus 中,@TableName 注解和 table-prefix 配 ...

  3. 16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图. ...

  4. 1.3K star!VisActor团队开源神器,3秒生成商业级图表,程序员直呼真香!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 项目速览 VChart 是VisActor团队推出的高性能可视化解决方案,GitHub斩获2 ...

  5. Sentinel——熔断规则

    目录 熔断规则 慢调用比例 慢比例调用代码实现 自定义异常处理器(返回响应流) 自定义异常处理类 测试 自定义异常处理器(返回页面) 异常处理器 定义页面 测试 熔断规则 现代微服务架构都是分布式的, ...

  6. 漏洞预警 | CraftCMS模板注入漏洞

    0x00 漏洞编号 CVE-2024-56145 0x01 危险等级 高危 0x02 漏洞概述 CraftCMS是一个灵活的.易于使用的内容管理系统. 0x03 漏洞详情 CVE-2024-56145 ...

  7. jsp技术之“如何在jsp中判断属性为空”

    一.判断对象列表为空不显示某段代码 <%-- 展开子属性 --%> <c:if test="${not empty product.variations}"> ...

  8. 为Java虚拟机分配堆内存大于机器物理内存会怎么样?

    之前在某个地方看到的一个问题,"如果为Java虚拟机指定的堆内存大于物理内存会怎么样?",今天正好又看到了HotSpot VM中关于为堆分配内存的源代码实现,顺便从源代码角度解答一 ...

  9. 驾驭FastAPI多数据库:从读写分离到跨库事务的艺术

    title: 驾驭FastAPI多数据库:从读写分离到跨库事务的艺术 date: 2025/05/16 00:58:24 updated: 2025/05/16 00:58:24 author: cm ...

  10. Intel指令集及SIMD数据加速

    查看CPU相关信息 执行结果举例: 查看电脑CPU支持的指令集: cat /proc/cpuinfo | grep "processor" | wc -l 支持的指令集: 向量指令 ...