.net session_cookie简介
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简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- 搞笑的ini文件读取ReadSectionValues
用fdconnection自动生成连接文本,将其写入ini文件,用于程序的读写.ini文件见后面. Lfini.ReadSection('LocalConnection',lstrings); Sho ...
- Sunshine+Moonlight让安卓Pad或IPad变6ms低延迟高质量无线显示器 #串流 #无线副屏
1.背景 最近看到多个博主在分享局域网或者公网使用Sunshine+Moonlight串流技术,将电脑画面投屏到其他屏幕(电视.安卓和苹果平板等等),宣称是个位数的延迟,并且能用平板打steam游戏( ...
- python 关于__init__()方法的用法
__init__()方法需要结合class一起来使用更加有效 关于__init__()的含义,查到解释是"负责对象的初始化",听起来挺懵逼的,还是结合实例来理解较好 直接看代码 c ...
- Robot Framework自定义库的创建于应用(全新库)
场景:新建库文件,库文件内新增方法,用于robot调用执行原始方法内不具备的能力.具体方法图下 1.找到目录C:\Python27\Lib\site-packages 2.新增文件夹"New ...
- .NET AI从0开始入门 SemanticKernel 从基础到实践
引言 本教程将带你全面了解SemanticKernel,一款强大的AI开发工具包.以下内容基于实际代码示例,帮助你快速掌握使用技巧. 资源链接: 教程代码仓库:https://github.com/A ...
- idea格式化代码快捷键
Ctrl+Alt+L Ctrl+Shift+Alt+L
- 一个日h站的Nday
0x00 前言 今天先来无事的我翻起了qq收藏夹.忽然发现了一个去年EDUSRC群里一个老表发的洞.今天就给大家发出来耍耍. 抵制黄色网站人人有责,打造绿色上网环境. 面对正规网站时候,请不要做非法测 ...
- K8s进阶之Deployment的更新&回滚
更新概述 更新指的是对 Deployment 所管理应用的配置.镜像版本等进行修改并应用到集群中的过程.通过更新 Deployment,你能够实现应用功能的升级.修复漏洞.调整资源分配等操作. 更新触 ...
- 参考案例之“对象调用方法时,如何在方法中使用对象,例如(root.display()的display方法中使用root)”
一.对象调用方法时,如何在方法中使用对象,例如(root.display()的display方法中使用root) 1.测试方法 @Test public void suanfa24() { TreeN ...
- 如何反向绘制出 .NET程序 异步方法调用栈
一:背景 1. 讲故事 这个问题源于给训练营里的一位朋友分析的卡死dump,在分析期间我需要知道某一个异步方法的调用栈,但程序是 .framework 4.8 ,没有sos后续版本独有的 !dumpa ...