C#中关于Cookies的读取实例详解
C#中Cookies的读取
链接:
一 、写入Cookie
1. Name 和 Value 属性由程序设定,默认值都是空引用。
2. Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的。
Domain属性缺省就是www.kent.com ,可以由程序设置此属性为需要的值。
3. Path属性的默认值是根目录,即 ”/” ,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。
4. Expires 属性,这个属性设置此Cookie 的过期日期和时间。如果没有设置Cookie 的有效期(默认设置),也可以创建 Cookie,但它不会保存到用户的硬盘上,而是会成为用户会话信息的一部分,关闭浏览器或会话超时这个Cookie即会消失,这种Cookie称作非永久性的 Cookie。存放SessionID的Cookie就是这样的一种Cookie,它不存放在硬盘上,只存在内存之中。
5. 将要发出的Cookie附加到Response的Cookies属性中就可以将此Cookie发送到客户端:Reponse.Cookies.Add(Cookie)
6. Domain属性+Path属性 相同的所有Cookie 在客户端都存在一个文件中,Cookie之间以”*”分割。每个Cookie的第一行是 Cookie 的名称,第二行是值,第三行是Domain属性+Path属性组成的一个字符串,指示此Cookie的作用域,其余各行则包含 Cookie 的日常处理信息,例如过期日期和时间。Cookie 中还有一个简单的校验和,如果更改 Cookie 名称或值的长度,浏览器就会检测到修改并删除该 Cookie。
二 、读取Cookie
1. Request.Cookies 属性中包含了客户端发送到服务器的所有Cookie的集合,只有在请求URL的作用范围内的Cookie才会被浏览器连同Http请求一起发送到服务器。
2. Name 和 Value 属性和子键的值很容易读到。
3. Domain 和 Path 属性 是读不到的,读Domain属性永远是””,读Path属性永远是 ”/” 。本来这些属性的用途很有限。如果您的页面与 Cookie 不在相同的域,您根本就不会在页面的位置接收到该 Cookie。
4. 也无法读取Cookie 的过期日期和时间。事实上,当浏览器向服务器发送Cookie 信息时,浏览器并未将过期信息包括在内。您可以读取 Expires 属性,但总是返回为零的日期/时间值。Expires 属性的主要作用是帮助浏览器执行有关 Cookie 保存的日常管理。从服务器的角度来看,Cookie 要么存在要么不存在,所以对服务器而言,有效期并不是有用的信息。所以,浏览器在发送 Cookie 时并不提供此信息。如果您需要 Cookie 的过期日期,就必须重新设置。
三 、修改和删除 Cookie
1. 其实你不能直接修改一个Cookie,是创建一个同名的 Cookie,并把该 Cookie发送到浏览器,覆盖客户机上旧的 Cookie。
2. 同样您无法直接将其删除一个Cookie,可以通过修改一个Cookie达到让浏览器帮你删除Cookie的目的,修改Cookie的有效期为过去的某个时间,当浏览器检查Cookie 的有效期时,就会删除这个已过期的 Cookie。修改有效期删除Cookie
四 、Cookie同Session的关系
1. asp.net中Session可以采用cookie 和cookieless两种方法,cookieless方式是将SessionID放在URL中在客户端和服务端中来回传递,不需要用到cookie,在这里不讨论这个方式。
2. 在asp.net中客户第一次请求一个URL,服务器给这个客户生成一个SessionID,并以非永久性的 Cookie发送到客户端。
3. 非永久性的 Cookie只有在浏览器关闭后这些Cookie才随之消失,Session的超时判断是这样的过程:
3.1 第一次客户端访问服务器,会得到一个SessionID,以非永久性的 Cookie发送到客户端。
3.2 在这个浏览器关闭之前访问这个URL,浏览器都会把这个SessionID发送到服务端,服务端根据SessionID来维持对应此客户的服务端的各种状态(就是Session中保存的各种值),在web应用程序中可以对这些Session进行操作。
3.3 服务端维护此SessionID的过期时间,IIS中可以设置Session的超时时间。每次请求都将导致服务端将此SessioID的过期时间延长一个设置的超时时间。
3.4 当服务端发现某个SessionID已经过时,即某个客户已经在设置的超时时间内没有再次访问此站点,即将此SessionID,连同跟此SessionID相关的所有Session变量删除。
3.5 客户端的浏览器未关闭前,并不知道服务端已经将这个SessionID删除,客户端依旧发送此SessionID的cookie到服务端,只是此时的服务端已经不认识此SessionID了,会将此用户当做新用户,再次分配一个新的SessionID。
cookies的创建:
在客户端创建一个username的cookies,其值为gjy,有效期为1天.
方法1:
Response.Cookies["username"].Value="zxf"; Response.Cookies["username"].Expires=DateTime.Now.AddDays(1);
方法2:
System.Web.HttpCookie newcookie=new HttpCookie("username"); newcookie.Value="gjy"; newcookie.Expires=DateTime.Now.AddDays(1); Response.AppendCookie(newcookie);
创建带有子键的cookies:
System.Web.HttpCookie newcookie=new HttpCookie("user"); newcookie.Values["username"]="zxf"; newcookie.Values["password"]="111"; newcookie.Expires=DateTime.Now.AddDays(1); Response.AppendCookie(newcookie);
或者:
System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);
cookies的读取:
无子键读取:
if(Request.Cookies["username"]!=null) { Response.Write(Server.UrlDecode(Request.Cookies["username"]));
或者:
HttpContext.Current.Request.Cookies[strCookieName] }
有子键读取:
if(Request.Cookies["user"]!=null) { Response.Write(Server.UrlDecode(Request.Cookies["user"]["username"].Value)); Response.Write(Server.UrlDecode(Request.Cookies["user"]["password"].Value));
两种添加与读取方式:
添加:
Response.AppendCookie(newcookie); System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);
读取:
Request.Cookies["username"] HttpContext.Current.Request.Cookies["username"]
只要不给cookie设置过期时间,cookie在浏览器关闭的时候自动失效
删除cookie修改时间即可: Cookie.Expires = DateTime.Now.AddDays(-1);
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public class Cookie { /// <summary> /// Cookies赋值 /// </summary> /// <param name="strName">主键</param> /// <param name="strValue">键值</param> /// <param name="strDay">有效天数</param> /// <returns></returns> public bool setCookie(string strName, string strValue, int strDay) { try { HttpCookie Cookie = new HttpCookie(strName); //Cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com Cookie.Expires = DateTime.Now.AddDays(strDay); Cookie.Value = strValue; System.Web.HttpContext.Current.Response.Cookies.Add(Cookie); return true; } catch { return false; } } /// <summary> /// 读取Cookies /// </summary> /// <param name="strName">主键</param> /// <returns></returns> public string getCookie(string strName) { HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies[strName]; if (Cookie != null) { return Cookie.Value.ToString(); } else { return null; } } /// <summary> /// 删除Cookies /// </summary> /// <param name="strName">主键</param> /// <returns></returns> public bool delCookie(string strName) { try { HttpCookie Cookie = new HttpCookie(strName); //Cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com Cookie.Expires = DateTime.Now.AddDays(-1); System.Web.HttpContext.Current.Response.Cookies.Add(Cookie); return true; } catch { return false; } } }
示例:
Cookie Cookie = new Cookie(); Cookie.setCookie("name", "aaa",1);//赋值 Cookie.getCookie("name");//取值 Cookie.delCookie("name");//删除
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public class Cookie { /// <summary> /// Cookies赋值 /// </summary> /// <param name="strName">主键</param> /// <param name="strValue">键值</param> /// <param name="strDay">有效天数</param> /// <returns></returns> public bool setCookie(string strName, string strValue, int strDay) { try { HttpCookie Cookie = new HttpCookie(strName); //Cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com Cookie.Expires = DateTime.Now.AddDays(strDay); Cookie.Value = strValue; System.Web.HttpContext.Current.Response.Cookies.Add(Cookie); return true; } catch { return false; } } /// <summary> /// 读取Cookies /// </summary> /// <param name="strName">主键</param> /// <returns></returns> public string getCookie(string strName) { HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies[strName]; if (Cookie != null) { return Cookie.Value.ToString(); } else { return null; } } /// <summary> /// 删除Cookies /// </summary> /// <param name="strName">主键</param> /// <returns></returns> public bool delCookie(string strName) { try { HttpCookie Cookie = new HttpCookie(strName); //Cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com Cookie.Expires = DateTime.Now.AddDays(-1); System.Web.HttpContext.Current.Response.Cookies.Add(Cookie); return true; } catch { return false; } } }
示例:
Cookie Cookie = new Cookie(); Cookie.setCookie("name", "aaa",1);//赋值 Cookie.getCookie("name");//取值 Cookie.delCookie("name");//删除
注意:当Cookie存中文出现乱码,则在存放时给中文编码,如Cookie.setCookie("name", Server.UrlEncode("aaa"),1),读取时解码即可
另外:只要不给cookie设置过期时间,cookie在浏览器关闭的时候自动失效
以上是C#中关于Cookies的读取实例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

当今人工智能(AI)技术的发展如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI模型LLM相关的项目框架,希望能为大家提供一些参考。https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一种开源的软件开发工具包(SDK),旨在将大型语言模型(LLM)如OpenAI、Azure

如果你是一名.NET开发者,你必须意识到在交付高质量软件方面,优化功能和性能的重要性。通过熟练使用提供的资源并减少网站加载时间,你不仅为用户创造了愉快的体验,还能减少基础设施成本。

在高并发请求处理方面,.NETASP.NETCoreWebAPI性能优于JavaSpringMVC,原因包括:AOT提前编译,减少启动时间;更精细的内存管理,由开发人员负责分配和释放对象内存。

一.丢失Cookies操作路径一:http://localhost:8080/content/requestAction!showMainServiceReqDetail.action路径二:http://localhost/content/requestAction!showMainServiceReqDetail.action路径三:http://localhost/clp/requestAction!showMainServiceReqDetail.action路径一是直接访问,路径二与路

C#.NET面试问题和答案包括基础知识、核心概念和高级用法。1)基础知识:C#是微软开发的面向对象语言,主要用于.NET框架。2)核心概念:委托和事件允许动态绑定方法,LINQ提供强大查询功能。3)高级用法:异步编程提高响应性,表达式树用于动态代码构建。

随着网络爬虫的发展,越来越多的网站和服务器为了防止被恶意爬取数据,开始采用反爬虫策略进行防护。这些策略包括IP封禁、useragent检测、Cookies验证等等。若没有相应的应对策略,我们的爬虫程序就很容易被标记为恶意爬虫并被封禁。因此,为了避免这种情况出现,我们需要在Scrapy框架的爬虫程序中应用代理IP、useragent以及Cookies等策略

C#高级开发者面试需要掌握异步编程、LINQ、.NET框架内部工作原理等核心知识。1.异步编程通过async和await简化操作,提升应用响应性。2.LINQ以SQL风格操作数据,需注意性能。3..NET框架的CLR管理内存,垃圾回收需谨慎使用。
