这两个东西,最近项目操作的比较少,不过这两个在Web项目开发中一直都扮演着很重要的角色,有时有些细节会不小心就遗忘掉。
Cookies 的概述
Cookies是由服务器端生成,发送给客户端,用来保存一些数据文本文件。在用户进行网页浏览时,这家伙会在客户端与服务器之前传递,常用作身份的验证、用户会话识别或存储小型数据。由于cookies是保存在客户端,那么就意味着用户可以修改和读取,因此有人利用木马、病毒窃取用户Cookies并获得用户信息,所以,作为开发人员,Cookies不适合保存重要或者涉及隐私的内容,除非你加密。(当然,作为用户,定期清理这些垃圾是一个好习惯~)
Cookies 的限制
大多数浏览器支持最大为4096个字节的Cookie,所以Cookie不适合保存大数据。 浏览器也会限制同一个站点下的Cookies数量,一般为20个,超出这个数量的话,旧的Cookie将会被丢弃。 用户可以禁用Cookie,如果禁用后会影响Session的信息保存(相关问题在后续会讲到)
Cookies 的操作
由System.Web.HttpCookie中可以看到.net 提供的Cookie的属性及方法
// 摘要: // 提供创建和操作各 HTTP Cookie 的类型安全方法。 public sealed class HttpCookie { // 摘要: // 创建并命名新的 Cookie。 // // 参数: // name: // 新 Cookie 的名称。 public HttpCookie(string name); // // 摘要: // 创建和命名新的 Cookie,并为其赋值。 // // 参数: // name: // 新 Cookie 的名称。 // // value: // 新 Cookie 的值。 public HttpCookie(string name, string value); // 摘要: // 获取或设置将此 Cookie 与其关联的域。 // // 返回结果: // 要将此 Cookie 与其关联的域名。默认值为当前域。 public string Domain { get; set; } // // 摘要: // 获取或设置此 Cookie 的过期日期和时间。 // // 返回结果: // 此 Cookie 的过期时间(在客户端)。 public DateTime Expires { get; set; } // // 摘要: // 获取一个值,通过该值指示 Cookie 是否具有子键。 // // 返回结果: // 如果 Cookie 具有子键,则为 true;否则为 false。默认为 false。 public bool HasKeys { get; } // // 摘要: // 获取或设置一个值,该值指定 Cookie 是否可通过客户端脚本访问。 // // 返回结果: // 如果 Cookie 具有 HttpOnly 属性且不能通过客户端脚本访问,则为 true;否则为 false。默认值为 false。 public bool HttpOnly { get; set; } // // 摘要: // 获取或设置 Cookie 的名称。 // // 返回结果: // 除非构造函数另外指定,否则默认值为 null 引用(在 Visual Basic 中为 Nothing)。 public string Name { get; set; } // // 摘要: // 获取或设置要与当前 Cookie 一起传输的虚拟路径。 // // 返回结果: // 要与此 Cookie 一起传输的虚拟路径。默认值为当前请求的路径。 public string Path { get; set; } // // 摘要: // 获取或设置一个值,该值指示是否使用安全套接字层 (SSL)(即仅通过 HTTPS)传输 Cookie。 // // 返回结果: // 如果通过 SSL 连接 (HTTPS) 传输 Cookie,则为 true;否则为 false。默认为 false。 public bool Secure { get; set; } // // 摘要: // 获取或设置单个 Cookie 值。 // // 返回结果: // Cookie 的值。默认值为 null 引用(在 Visual Basic 中为 Nothing)。 public string Value { get; set; } // // 摘要: // 获取单个 Cookie 对象所包含的键值对的集合。 // // 返回结果: // Cookie 值的集合。 public NameValueCollection Values { get; } // 摘要: // 获取 System.Web.HttpCookie.Values 属性的快捷方式。此属性是为了与以前的 Active Server Pages (ASP) // 版本兼容而提供的。 // // 参数: // key: // Cookie 值的键(索引)。 // // 返回结果: // Cookie 值。 public string this[string key] { get; set; }
简单的操作如下
public ActionResult Index() { var cookie = new HttpCookie("MyCookieName", "string value"); //简单的Cookie Response.Cookies.Add(cookie); var testCookies = new HttpCookie("MyCookiesInfo"); //默认属性 testCookies.Value = "丰富的Cookies"; //TestCookies.Domain = "testlocalhost";默认为当前网站跟域,如localhost,但如果你想设置域为testlocalhost,嘻嘻,自己试试 testCookies.Name = "123456"; //这里重置了该Cookies的名称,改为123456 //额外的属性 testCookies["TestAttr1"] = "再来个属性"; testCookies["TestAttr2"] = "再来个属性2"; //设置超时时间 testCookies.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(testCookies); return View(); } public ActionResult About() { string test = Request.Cookies["MyCookieName"].Value; string test2 = Request.Cookies["123456"].Value; string test3 = Request.Cookies["123456"]["TestAttr1"]; Response.Write(test + "|" + test2 + "|" + test3 + "|" + Request.Cookies["123456"].Expires.ToString()); return View(); }
About页面输出的结果是 “string value|丰富的Cookies&TestAttr1=再来个属性&TestAttr2=再来个属性2|再来个属性|0001/1/1 0:00:00 ”
![bubuko.com,布布扣](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABP0AAABQCAIAAADtDJcZAAAWWElEQVR4nO3dTW/jSH7Hcb4LvQwdpPfgd+AbL9K94YvuOrWHB8s+uW+ETmNgDQgEsowxwQA25ARI1gNsBiCkkI3eh0a2Q+96Z2bTszud9E6YQ5HFqmKRlruptsz+ftDYtSmy+CSN+eO/inK++2jffPNNVuPrm8T78qr67+ubxDJ3cjR0HGd4lNRPCseO4zjOOFQWy6flxqFcTJALWyYqzRevjkPRnliFuozjDI8SMUG8KGYcHiXKNgyHRovmj5nafLX9uiP5hJxPc6eXt2JKdD6dTqen5+enctLt5enp5a34X3WKnNtoQrq9PJ2eR8Vvct688aKR28tTbXqmTLI2CwAACsnRsBvXJHXSVThZ5BeT4WLkTHvhKlVfHx33nGnPv/TlbPGlr88D4Ilxtpp725bHRC32oquicyXhAgCATyQcd/taKx5MHaf4N1qEWRbvHY+qoTZdhb1yzh65F3jSnlTutRSE0TVKuZfUCwDAI+h47AXwWXpSuRcAAAAAgAci9wIAAAAAuozcCwAAAADoMuf7j/bq1auPbwQAAAAAgG2g3gsAAAAA6DJyLwAAAACgy8i9AAAAAIAuI/cCAPAZSLLhMEs+eMEPXhwAgB2w3dz79U3ifXlV/ff1DX86PxeB/2K5SutfT+fHxzUzqC8lL47nDa1s5Pby9PTy9iMb6YLE94Pq1OViPl8sGxYL/JPgyvLJDfyTacWhcr6Wi7myYMMZ7wCOLXbYo+Te7aflcOw4w6Ok+NFxHMcZh9o2HA2dkv4aGiVHw+HRY2/ETkujsN8fPeg/u2kUpdqv19dRcwPGElmWxUEQP2SdALJs27nX+/LqQdOzrPj7lP8Ny5Q/Y045Wf8bZvwRyxfIJ2qLq/MqL/BHcIsC37dd8SRX9qt8NSSX86Srpe8H2n/1o/MyB5xHG22KkXsfEoOLtYkFbi9PzSiyUUvmGm8vT/Ul1Rnu2bzofINVJldBNTVNpydXVxfVdLRcnBUT06urG+PVdLU8W1xUp2f2U5wuFhdKy4skn/PFcrU688/Ude/QsVVWfu9Kn8Cxfcju4LPQxdwbjp3heDwcHiVZcjRU/vKXVxF5eEuqP+M+3TxayjVksXc1d0yycFzZf+U+S5Zl2cx1jQAaB7ORV70ELZdJo7CnX5oW89dtSTrqG0s4A3f2kP2yXupW11V3HGrat6wR2Glbz70///x3/d/7d+/+WpN7lc+nmnvzT58SiJOjoTZR+YCan1nxu/kBtk9FS5aLuS0STE+KUljgvzg+PqzOMF9crFZppoeK+WKpVr3mi+Xt5akadqPzzYLvB9d75YLRuZaxH9qgJXifn6uTNsu9eZzZbNVJEcP0gJSHo3S1tJyG6aHvn+l/wVIRqKx1S1tN8lDNfsvF/MQPilpo3tRqtdJ2cxeObflOis43OL67fmwfuDvoPhlBk2zoZI6TOU4m/wyOiynjMEuO8p8dJztKtNx7NC5ny2xNlcsOsyTLjob5r9uoGuapLP+/cKxdvit/4dX0pr+CZpbY1wHyurK4QSLfFMq9k+L6Uj8Ayn2WLMuyNAr9IBhUEul1IO7U299taRROyqCbxYEf5uXcuns36cSdpPUt1O2XMsVyB6O619bjsFn7xq0mYEdtPfe+e/fTu3c/vXv3N/Hv7dvvbt/8rqneKyKp7eNjC6t6dTg5GjrOeDy+J/eaJWVsUU29N8vk1XmWZVmWrrQaWXIViN6by8XiZrW8KAq/y8UiqUstZXWruNo3pqgRa3p6GRW/lrPlzZoTigUtNUUjazW1Y29VSSTqDFH58/n56enl5flUq2tvHAttZckT44yITraiJpmulmeW9PViuUpFl9oiaKmvlqe4SIBlVfPm6upisbi6uri4ujjzfbkRx8fHwVWyi8d24+O768f2gbuD7ity77hIrclR5oyzLMuOhpk9DIaZM1Zyr4y7YR5rzaaSbFgE4HCchcpK298beSFf5t6aqq7WR4y//Zvr/E0C8T5RdtOIh5X3kXKfJcuyeE/p4Vwt/DbkXr162ytyb929m81yr7lfti1Jjob5R6C617bjUM7f3H43ewage7aee3/66a3RN+M/fx9/SO6t3HkrKrvyvwsi9YZ61NX7OYuJRt9nPqrtSyyjEvU6VVYpC6tX6mruPVssLq7yN0zg+8nt5amlZ3N0XmSX4vXKFHHxLxfPs4BSZzRmMApmeaZSIoSWJjZoR5u/+EUtxVlrkkZ1uzqn1udbKGdXj2RRkzTvRIibDsvFmewom5SdddP58WHRQt5ZV+Q9Oco08P0kS+d6Ab8oXSYvjucXi0WSZTdXV2mWyZqkfup26dhqMz/xY1vdd3zOqt2VRUytRlOliuvIRYwFrU0VdePQWOkWdkYf7+Q4w6NEm1ZT7+X6fHOfSezdrKdA5T5LFnpebOuB7DiDuGzNcqVZX++tu3djWcuoIfdqb3LxqVCr2JXcm/9sOw7W3EvsxZO19dz7449/efv2+x9++NP33/3xuz+n6R9++/tX0YNzr/xjZh1o4TjjUKbeuk7MZY9otdxL6XfblCRg1HTLtJBpYUD8KitpJ0mWJVeBqIPlubd6EW+kmul5ZJ2i5pYyQRmpRkQdJQ2J2HV7eToVC+gtlKu4rx17V1u9KmnNZs3726ixJpnfnjgsO50fXlxdHE6nJ/7ZYnGRrpaHyt0KZZCq5mKxSCvZTL2LsVwskixZ5GlNZLPiQWU7eGw37hW868f2gbuD7tsw9ybZUHRvNhbZLPcKZfr9BE+BvvcqXPu182GuNV0/UjJkbpJ7bfdZskytxNrqvdV1ZVneO7qcV8m9xno+rN5r7XJcnbhZ7t2ofTo548nYeu5N3/z29W/Wv0m+fRX/+6v/+HUc/Wr97b88LPeW98ssH8IiuIbmf5IqcbaMuGowZqTvlukdNctnz1ofC6S+qlfS8r6dge8n1uv4DXOv6OQqq8AiatlDQZmsymqjCGDNJcT6doxyprrjZefdD8m9D65JLsyhpOmZf3axOFuubhb1jx2uyWZi2bzxZfnDmRLqxES1F8DJzermZpXu3rE13l1P+Njadgeftw37OStJNTlqrPfa+jmPi3G8R8NibLBa/t3Kfhm5t1KiMsb3com+kW6X8NT3wab9nG0Trbk3HpQlX8sycTDTr1Z7YfV5zjVryX+vzb217+9KkN2sn/P97fOJwlOy9dwbR//263/9p5vr8Ob6lzfXv/zV8h+++ed/fEDutVV69Y4nldyqx1p9TnlvzynG5BN7W2ft5DydTqfzxfKq6LFseyZQmZCriSJT5rE912rjfs4yCpT9nPWerreX53qJUO1Yra26Ej6b21Ea0vtqy2xirqnag7dsfJPxpyfawV+cKCdCHVxdDDE9EwNN675xpyabJYvF0vYks8NKNhO0vri7dWzzsnPtAVX3eveP7UN2B5+HhudaKVPGYRYWD68ajhvrvbam5POx5IOsRGtb/DYceU1Q3CU3L8Pr+j+jQYdjb+XGSO3znBpzb+iNHKfnB36lo/MgFt88pD2YVXkAq+epqVir99o3cbPca7nhMzbv9yjzbPRcK7XNap9n++hfYHft1Pf32r5zqNK1pFrbbXpYs214b5ZpzfKR3aq651o1PxNIyb1qHigv67WaXpl39IqcMUUftFk+7ldtq0jC5W96Q8Xrtmcx3d9OPsl40rBalMtnkI/fssysrefeJ1nLI1l3RuQ3x8pDLYLWSeV7aK3ZTOSu5eJsubqRX127XCwWlpqkkJ/ENK9J7tCxtReKn+yxfejuAIDU8dhrdg20fH+POpt2nVlzaCz9nJUmlBZiT4+sWu6137vZaHyvZb+qX2OkJdUNvsdImb/avu1IAjttu7kXqM+95tecGvVecbGuPODnZKqPbMQm1GwmvlnnsBz8mZwoh7RuiKlkmyEfWWrcnrhYnB0qdzEC30/KAmk+zPXw+MWZ8j20TxHHFkBXdX1wb/sax/fm4mCmPPVKPth5cN+Cqef52u/6CGEAGyL3AgAAoETsBdA95F4AAAAAQJeRewEAAAAAXUbuBQAAAAB0mfP9R3v16tXHNwIAAAAAwDa0U+/9+EYAAAAAANiGdnLvHwAAAAAA2Ent5N43AAAAAADspHZy73+1J03T169fJ0my3oKXL1++fv06TdMWNxgAAAAAsMvayb1pS25vb1++fHl3d/f+/fttPMXr/fv3d3d3SZK0tcEAAAAAgB23W7n39evXd3d320i8qru7O1H1BQAAAAB0Xju597YlSZJsqdKrev/+/cuXL9vaZgAAAADALmsn9/6xJev1etuhV1iv121tMwAAAABgl7WTe//Ukk+Ze9vaZgAAAADALmsn99615FPm3ra2GQAAAACwy8i9AAAAAIAuayf3/rkl9+beVTjf398/eD6vm2H+/GB/f/8L/6t7c29b2wwAAAAA2GXt5N6Pb0TYMPfOw1U17hZh+M0Xz0ZihjfffjWqycDr9bqtbQYAAAAA7LJ2cu/3LanLvfPnB6NnX7xRcq/ItGKi+LmOtTi8Xq/b2mYAAAAAwC57Mrn33kw7f36wv38QFh2h588P9vdHX337xtoguRcAAAAAPhPt5N4fWtKQe0XEVfozrw6U3CuC8TwMi3x8sMqy+fODuoG+6/W6rW0GAAAAAOyydnLvX1rSnHuV/syjr769lrlXTJ+H1188Gx08n4tIbB0GrObetrYZAAAAALDL2sm9/92Sxtz7/KB4SNUqnI+ePRsp9d4iEh+stF9lSDZ7O6/X67a2GQAAAACwy9rJvW9b0jy+V39Clezn/OaLZ6P9/dEvwl8YT7dq+Daj9Xrd1jYDAAAAAHbZk8m94tHNttybqSXfIuuuDsi9AAAAAIC2cu+PLdks94oCrzmCt/ptRs25t61tBgAAAADssnZy719bUpd7W7der9vaZgAAAADALmsn9/6tJZ8y97a1zQAAAACAXUbuBQAAAAB0WTu596eWfMrc29Y2AwAAAAB2WTu5911LPmXubWubAQAAAAC7rJ3c+z+N1g/xyXIvAAAAAOBz0E7u/d9G60+VZgEAAAAAMJB7AQAAAABd1k7ufd+I3AsAAAAAeCzt5N6/NyL3AgAAAAAeSzu59+dG5F4AAAAAwGNpJ/f+XyNyLwAAAADgsbSTe5vXQe4FAAAAADwWci8AAAAAoMvIvQAAAACALiP3AgAAAAC6bIdyb+iNZkHcMMPMHdTNoLyUjvp7Ta3gYdKJO0krU+NgNnBnDYuF3mjkhdbpjsVAnrI4mKkLNpz0py4OZrZdS0f9fhhVD3m53EA5XPp0C+Vgah+NNAr7/VHDagAAAIDO2KncO7Fd7qdBcG2bWQ3J6jyx606iptgAuzQKe5bc1PMD36/EMzWzBUFQaSx23Zltuv0s+54nJ8WBL2YQp3jmuh1IvTPXkkkH7kzd8UJ5oyGNrq8rxyr0Jn4QVKeLY262FYXKuUs9zxdz7vVHURRObDcmAAAAgO555NwbBzNbjcrpFZWo0Bv1+31rZoiiKNPT2sCdqeXEoiCZjvr5LJtUDmfuoFrJTKOwZy+yWYk19oqAV27AhtsglipSSq5SYq3O4DfWCS2LmC8XMckIn3IN1oqi65pRVoRVa03YWu9Vj0kczHr9UVrEP9FUWtzJEG8Y2az6/ultXL2sHCizxFqdofG4bfQGKyKuFj7lOqyHpdffm+jrTfOwaq0JW86OfkzSUb83C2Jxz0I2FVXepV0tsAMAAOCztfv13izLMhFxC6lazi0u30VWufaKEpaMLkpH2djbqMBlqZs9UOx5oayIijApY4a1fF2VRuGevhkz13WV4qdthr2G3GskxrqVVkq+PaNN0YG52DvLsRJRWXRXLkKs+mp5luU5kpXhOAiCwPcD3w+Ciev2yvzWF2c59LxYqYiKMFnE7E3jmnGg0ih0XXeida42Z9irP27qiW6YrVryrZwL0YE53zvbx0FEZdFdOQ+x6qvKucjTtVIxToMg8Dzf9zzf89xyY3r9/l688V4AAAAAT9Gj516tFmotAGaVsrA6/lPNva478YOgKBSL2GAJZkUCyROdDHtFDhGLxIOiXFZNjEV1zmyhGKcau+7sOvD3+j2Z+lK9W2lzC8r+lkVjz/NlFqrMUB5GsZ1iH2dBMCi3KlOPhh7Dys1QbiKkmT19pVGUiphUFGPLzrQzdzDKWyhzVE/ZBtGgEQKVyvxeEPhhlMoQa/RzDr1JGF3PXFd9k+jz5GXPQWVPR3mltKevNL9j4lZ6B4gZjEMtdqfXH/neSL4Vi/sysevOjHsHymaIjSzrvdV3ZhRFop+z7IQsO0IrPQ7K2C92rfg4WNYuz2wczEae73m+vPOSVvo5q3uRAQAAAB3y6Lm3pEYsvcCr9TvVhyyqiTGPJeJpPaK16sW98tgktXomNmAka5jG05XUMKC0mWeY0PPUbCY2aeSFxmbLLbm3BWONchF9d8x8YmTUOJg5Zt/seyJNY71XBsJev+wQG4i7A57npVk8ULJozUOb8j01cq96qOPAD6NI9iueuW6snKOZO3CcQax3PFZzr/y5OPiWIr9xoMQiaiOVtG8ct3TU71Wf2tU8FLmh3iujtezSL3P1xPP8IA69kVI2tz9pTOxp5Qyqb4DU83z5nhTvpcr7/J69AAAAAJ6iHc296uW49XlLo0qGNDrN1tV71bXMXDe2BNp4r9/vmTXncjbbmNK8xjgLYlmv23Nn10XxOdNz730tmGvMlPGfStn5/txbSZ73595qvdfzJkaP3JnrBsFsFlw3jHqty70z1w2KxuPyh5kSmH2jgu04vTC6DoqBqTN3T/yqtln8YhlKLQ5dTxtMqx4oOSy27NF9b+6tJM9qr2PLjlfqvRNjmG4ahRPPn7iT66ah2vbcK5YtGpdrUWfOJ6pvv4H2Lr1/LwAAAICn6HFzr72Ts3E5bnvY0qRaRzWeRVTMoz4BKB92e2+915guZrbVe3OyM+rM3QujSCxofJFPTb3X2kJqrFHv2ioz3kfl3ko/50g9FwN3onb3VUdUy+G74n/rBgzXfUmP5/nWh5lVcm9WbGdZfizOnflFPtZ6b76+4s2jDls17rDI/tjypDww95bvsesgiCr9nPX97XneRD3syqHN33gTd5I2fZtR3TdL+cZJ1G+sZMbTuSpvQm0veB46AAAAumRH672q5octKblXC1pqPiwS3kDpK+vUje8tRsbGM3cg5lFyixykqlVf5a/qeOCiq6o2/lZuYXMLYs/kIqJBkckH5Txmm3K9qRJrq51pG557XA3kxkmRYV4ebXWlKmvujfOxu7NZcC3DWxz4nje5L/eKAb9yl4OBPv5W2QCjfls+5dh2oNJRMQZbnIKanSoPtdGvXj13TuNjwyr9h40sLcO8jLXm+S1Yc6/ItOnEnVyXRz71PK9a781/Kc61SLkb7gUAAADwFD2N3Gt8f6xR79WfKZVfwVeHX+Jexvhh/ZlY2qDWum7Mkm2Gsp+t+lIQzAZmH+NopA8hdpzBxPJVt0+JPn5Ye4vqI7Hrhu9Klhlk53D1pTS6nrh7Rsd49faHGEK857rV72cGAAAAumSHci8AAAAAAK0j9wIAAAAAuozcCwAAAADoMnIvAAAAAKDLyL0AAAAAgC4j9wIAAAAAuozcCwAAAADosv8H4oeRBiE2FLIAAAAASUVORK5CYII=)
这里可以看到一个cookie操作的特性
当浏览器向服务器发送 Cookie 信息时,并不包括有效期信息。(Cookie 的 Expires 属性始终返回值为 0 的日期时间值。)
即服务器不能获取cookie的有效时间来判断cookie是否已经过期。
那我们能不能改变cookie的有效时间让它提前过期呢?我们修改About的代码如下
string test = Request.Cookies["MyCookieName"].Value;
Request.Cookies["MyCookieName"].Value = "我要修改属性啦!";
Response.Cookies["MyCookieName"].Expires = DateTime.Now.AddDays(-1);
string test2 = Request.Cookies["123456"].Value;
string test3 = Request.Cookies["123456"]["TestAttr1"];
Request.Cookies["123456"].Value = "我要修改属性啦!";
在执行Index时,cookie信息如下
到About页面时
只剩下123456这个cookie了,因为我们设置MyCookieName的超时时间比当前时间小,因此客户端自动将这个cookie删除了。
但请注意,123456的cookie值没有改变!!为什么??别急,我们先来看看我们在操作上述代码时,客户端与服务端是怎么沟通的?对,Http协议。
Http协议的详细内容就不在这啰嗦了,请去找度娘(屌丝程序员的最爱)。研究协议的最好方法还是抓包,抓包工具很多,以后应该会针对http协议有一篇总结,到时再详细说吧。
以下是请求Index时的一个抓包的部分截图
我们可以看到,服务端在HTTP的响应头中通过【Set-Cookie】的响应头来进行Cookie的设置
那么我们在访问About时,抓包截图如下
可以看到产生了一个【Set-Cookie】的响应头,将MyCookieName的Expires时间改变了(比较123456的Expires即可知MyCookieName的Expires变得比当前时间小,故删除操作是客户端自己完成的),因此,客户端就只剩下123456这个cookie了,那为什么123456的值没有改变呢?怎么改变呢?我们再来修改About的代码,增加如下代码
var temp = new HttpCookie("123456"); temp = Request.Cookies["123456"]; temp["TestAttr1"] = "真的要改变属性值啦!"; Response.Cookies.Add(temp);
然后重新由Index页面跳转到About页面
抓包截图为
没错,这样才会产生一个【Set-Cookie】的响应头
因此操作cookie的另外一个特性为
服务端不能直接改变客户端的cookie值,包括超时时间也不能直接修改,需要重新建立一个对应名称的Cookie,然后重新对该Cookie下的的属性赋值,再添加到httpContext中,
超时时间也一样,只能重写
虽然修改不了Cookie,但可以取得,那服务端是如何拿到客户端的Cookie信息呢?
细心的朋友发现了刚才抓包截图中左侧为客户端请求头,很明显客户端(浏览器)在每次请求时会把cookie信息装进请求头中,这里还需要注意一点,我们保存在浏览器上的cookie非常多,难道每次请求都会把所有的cookie放到请求头去么?答案是否定的。
浏览器会检查当前要请求的域名以及目录, 只要这二项目与Cookie对应的Domain和Path匹配,才会发送。对于Domain则是按照尾部匹配的原则进行的。
最后补充一下和Cookie相关的一些操作
校验浏览器是否支持Cookies,不支持时可以提示用户
if (Request.Browser.Cookies) { //浏览器支持cookies,继续coding...... } else { //浏览器不支持cookies,那么弹出提示信息或者重定向到新页面进行处理 }
Js也能操作Cookies的,简单的例子如下
<script type="text/javascript"> function WriteCookie() { var cookie = "cookie_js=22222222; path=/"; document.cookie = cookie; } function ReadCookie() { alert(document.cookie); } </script>
读取的效果为
如果想对读取结果进行解析,请自行处理一下。
写的效果为
在前面的代码中,如果你设置 TestCookies.Domain = "testlocalhost" 该cookie将不会被创建,大家能说说是什么原因么?
关于Cookies与Session系列一,布布扣,bubuko.com
原文:http://www.cnblogs.com/endysaiwang/p/3719814.html