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. bash极简教程

    今天看到消息,来自大神阮一峰的<bash脚本教程>开源发布了, 我也借此机会来总结个bash极简教程. 本文是一个更加简化的<bash极简教程>,告诉你什么时候需要使用bash ...

  2. Window7搭建Kafka环境总结

    1.安装zooeleeper 下载链接:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/ 安装步骤如下: 1)解压zookeepe ...

  3. 🎀截图工具推荐-Snipaste

    简介 Snipaste 是一款非常强大且免费的截图和屏幕标记工具,由一位来自中国的开发者开发.它以其简洁的界面和丰富的功能而受到广泛好评. 官网 https://zh.snipaste.com/ Sn ...

  4. .net core基础(一):安装并创建第一个webapi

    一..net介绍 .net是一个开发者平台的统称,用它可以构建多种类型的应用程序. .net平台下的开发语言:C#,F#,Visual Basic .net平台标准:.NET Standard .ne ...

  5. DP学习总结

    动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. -----OI Wiki 例.1-最大子段和 分析 DP四步 ⑴定义状态 定义\(dp_i\)表示以\(i\)结尾的最大子段 ...

  6. thinkphphp 计算分页 和分页总数 和sql计算分页 php

    利用page计算分页 $p=input('p')?input('p'):1; $limit=6; $res=db('points_log')->where(['p_uid'=>$uid,' ...

  7. Cline技术分析:基于Cline Prompt的File Tools MCP Server实现

    我们将基于Cline prompt技术,构建一个基于MCP协议的文件工具服务器.我们将从任务定义开始,并在任务执行过程中探讨各个关键环节. 任务提示词定义 1. 访问[hub.gitmirror.co ...

  8. 基于docker的AI-Codereview-Gitlab部署实战

    AI-Codereview-Gitlab是一个基于大模型的自动化代码审查工具,帮助开发团队在代码合并或提交时,快速进行智能化的审查(Code Review),提升代码质量和开发效率. 主要功能 多模型 ...

  9. Seata源码—6.Seata AT模式的数据源代理

    大纲 1.Seata的Resource资源接口源码 2.Seata数据源连接池代理的实现源码 3.Client向Server发起注册RM的源码 4.Client向Server注册RM时的交互源码 5. ...

  10. LocalSend 编译全过程深度讲解,解决手机与电脑互传文件痛点

    localsend编译 LocalSend 是一款开源.跨平台的 本地网络文件传输工具,旨在通过局域网实现设备间快速.安全的文件共享,无需依赖互联网或第三方服务器.它支持 Windows.macOS. ...