cookie是干啥用的?怎么用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie是干啥用的?怎么用?相关的知识,希望对你有一定的参考价值。
什么是cookiecookie 历来指就着牛奶一起吃的点心。然而,在因特网内,“cookie”这个字有了完全不同的意思。那么“cookie”到底是什么呢?“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦阁下从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。I3I.net的打算是,当访客结束其浏览器对话时,即终止I3I.net的所有 cookie。
Cookie 有哪些用途?
Cookie 的用途之一是存储用户在特定网站上的密码和 ID。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将要求阁下的网络浏览器利用阁下计算机硬驱上的少量空间来储存这些首选项。这样,每次阁下登录该网站时,阁下的浏览器将检查阁下是否就该唯一的服务器有任何预先定义的首选项(cookie)。如果有的话,浏览器将此 cookie 随阁下对网页的请求一起发送给服务器。Microsoft 和 Netscape 使用 cookie 在其网站上创建个人起始页。各家公司利用 cookie 的一般用途包括:在线定货系统、网站个人化和网站跟踪。
网站个人化是 cookie 最有益的用途之一。例如,当谁来到 CNN 网站,但并不想查看任何商务新闻。网站允许他将该项选为选项。从那时起(或者直到 cookie 逾期),他在访问 CNN 网页时将不会读到商务新闻。
这些 Cookie 是如何起作用的?
文档的 html 代码中的命令行告诉浏览器设置某一名称或数值的 cookie。以下是用来设置 cookie 脚本的一个普通实例。
Set-Cookie: name = VALUE;
expires = DATE;
path = PATH;
domain = DOMAIN_NAME;
那么安全性如何?HTTP Cookie 不能用来从阁下的硬驱上检索个人数据、放置病毒、得到阁下的电子邮件地址或偷窃有关阁下身份的敏感信息;然而,HTTP Cookie 可用来跟踪阁下在特定网站上的所到之处。不使用 cookie 就很难进行网站跟踪。
至于其他一切与因特网有关的事,如同阁下所希望的那样是匿名的。没有网站知道阁下是谁,除非阁下自己透露给网站。同时,cookie 只是为了更好地了解使用模式并改进网站访客的效率而采用的一个网站跟踪统计手段而已。
如果网站设计师旨在使网页能与访客更具互动作用,或者若设计师计划让访客自定义网站的外观,则就需要使用 cookie。而且,如果阁下想要网站在某些情况下改变其外观,cookie 则提供了一条快速、容易的途径,让阁下的 HTML 页面按需要而改变。最新型的服务器使用 cookie 有助于数据库的互动性,进而改进网站的整体互动性。 参考技术A Cookies 是一小段提请存储在您的计算机硬盘上的文本。当获得您的同意后,浏览器将会把此段文本存储到一个小文件中。
如果您将浏览器设定为在接收 Cookies 之前给予提示,您在访问 dell.com 网站时将会注意到希望在您的计算机上放置 Cookies 的请求,其目的是通知我们您何时访问了我们的网站。这个 Cookies 本身只是告诉我们一为过去的访问者再次访问了 dell.com 网站,而不会提供有关您的电子邮件地址或您是谁等信息。当然,您可以选择通过注册在以后某个时候告诉我们这些信息。
Cookies 为何能够持久发挥作用?
如果服务器没有检测到与您的对话对应的独一无二的 ID,它将生成一个 ID 并以 Cookies 的形式发送至客户端。因此,如果您接受此 Cookies,您只需接受一次即可。如果不接受此 Cookies,伴随每一次点击,您都将收到同样的 Cookies 接受请求,直至接受为止。也就是说,您访问 dell.com 网站上的任何页面及页面信息时,它们都会发出一个 Cookies 请求,直至您已经拥有了 Cookies。
是否所有的 Cookies 都一样?
否。在 dell.com 网站,我们有两类 Cookies:临时 Cookies 和日志 Cookies。临时 Cookies 用于保持用户对话并通知我们的服务器下一个用户访问页面。数据流量日志 Cookies 将告诉我们那些网页正被使用,那些没有。这将有助于改进网站、去掉那些不被访问的网页,以更好地满足您的需求。
Cookies 对于访问者有什么作用?
使用 Cookies,您可以享受到几个立竿见影的好处。例如,dell.com 中的技术支持区域会保留您的产品序列号,当您再一次访问此页面时,您会发现计算机的序列号已经输入在相应的位置了。
浏览网上商店时,您选择了几款货物放到购物车里,然后离开了。借助 Cookies,几天以后再回来时,您不必重复以前的*作,您选择的货物会仍然保存在您的购物车中。
此外,借助 Cookies 技术,您可以更好地使用广告页面或网站特定访问区域提供的信息。总体上说,Cookies 能够让我们通过分析数据流检测到什么对您有用,什么没有用,因此可以帮助我们向您提供更好的网站。将来,您或许能够通过 Cookies 告诉我们您喜欢以及不喜欢阅读的信息。例如,如果您是商业客户,我们能够向您提供针对您的特定需求的内容。
为什么我需要了解这些知识?
因为我们希望您了解让您接受 Cookies 的原因,确信接受 Cookies 不会泄漏任何个人信息,我们也不会因此具备访问您的计算机的能力。我们知道很多人对于 Cookies 很担心,但是通过与许多用户的交流,我们感觉到恰当地运用 Cookies 能够为我们双方都带来很大的收益,是值得的。我们非常看重我们与当前及未来客户之间的关系,因此我们尊重这些担心。
OverrideAuthenticationAttribute 是干啥用的?
【中文标题】OverrideAuthenticationAttribute 是干啥用的?【英文标题】:What OverrideAuthenticationAttribute is for?OverrideAuthenticationAttribute 是干什么用的? 【发布时间】:2014-12-20 09:33:30 【问题描述】:我在当前的 Web API 项目中遇到了一个标有 System.Web.Http.OverrideAuthenticationAttribute
的控制器方法,我很好奇这是做什么用的?
在 Google 和 *** 中搜索并不能回答问题。 MSDN documentation 不包含太多信息。它只说以下内容:
表示覆盖身份验证过滤器的过滤器属性 在更高级别定义。
另外,我查看了来源:
public sealed class OverrideAuthenticationAttribute : Attribute, IOverrideFilter, IFilter
public bool AllowMultiple
get
return false;
public Type FiltersToOverride
get
return typeof(IAuthenticationFilter);
但这并不能说明什么。
那么谁能解释一下使用OverrideAuthenticationAttribute
的目的是什么?并请给出一些使用案例以便更好地理解。
【问题讨论】:
【参考方案1】:OverrideAuthentication
属性用于抑制全局身份验证过滤器,这意味着使用此过滤器时将禁用所有全局身份验证过滤器(实现 IAuthenticationFilter)。
假设您有一个名为 BasicAuth
的全局身份验证过滤器:
public class BasicAuthAttribute : ActionFilterAttribute, IAuthenticationFilter
public void OnAuthentication(AuthenticationContext filterContext)
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
var user = filterContext.HttpContext.User;
if (user == null || !user.Identity.IsAuthenticated)
filterContext.Result = new HttpUnauthorizedResult();
并且过滤器被配置为使用此代码的所有控制器的全局过滤器:
public class FilterConfig
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
filters.Add(new HandleErrorAttribute());
filters.Add(new BasicAuthAttribute());
假设您想对单个控制器或控制器操作使用不同的身份验证策略。在这种情况下,您可以禁用全局身份验证。使用OverrideAuthentication
属性过滤,然后配置要用于该特定操作的新过滤器。当您与外部登录提供程序集成时,这很有帮助,并且您不希望任何现有的全局身份验证过滤器弄乱您的外部登录身份验证。
在下面的代码中,全局身份验证过滤器被禁用,然后为单个操作启用 HostAuthentication
过滤器以启用外部登录提供程序(例如 Facebook):
// GET api/Account/ExternalLogin
[OverrideAuthentication]
[HostAuthentication(Startup.ExternalCookieAuthenticationType)]
[AllowAnonymous]
[HttpGet("ExternalLogin", RouteName = "ExternalLogin")]
public async Task<IHttpActionResult> ExternalLogin(string provider)
// Auth code
【讨论】:
为什么,在您的示例中,您的BasicAuthAttribute
派生自 ActionFilterAttribute
而不是 AuthorizationAttribute
?
它可能有,但我不想覆盖现有的 Auth 过滤器,而是实施一个新过滤器。这就是为什么我继承 ActionFilter 属性并实现 IAuthenticationFilter :)
@ZenCoder,感谢您的回答和清晰的代码示例!
@FarisZacina 你能在这里使用 AuthorizationFilter 吗,你对 Erik Phillips 的回复 - 这是否意味着 Authorization 属性是一个 Authentication 属性。或派生自一个?【参考方案2】:
OverrideAuthentication
用于覆盖在更高级别配置的身份验证过滤器。比如说,你有一个像这样全局应用的身份验证过滤器。
// Applied globally in WebApiConfig
config.Filters.Add(new MyAuthenticationFilter());
而且,您希望阻止此过滤器针对特定操作方法或控制器运行。你可以在那个级别使用OverrideAuthentication
,就像这样。
public class ValuesController : ApiController
[OverrideAuthentication]
public string Get()
...
现在,在上面的示例中,您已在全局范围内应用了 MyAuthenticationFilter
。说,您想覆盖它并运行另一个过滤器,例如 MyAnotherAuthenticationFilter
仅用于 Post
操作方法。你可以这样做。
public class ValuesController : ApiController
// Removes all filters applied globally or at the controller level
[OverrideAuthentication]
[MyAnotherAuthentication] // Puts back only MyAnotherAuthenticationFilter
public string Post(...)
...
更多信息here。查看“过滤器覆盖”部分。
【讨论】:
感谢您的回答,尤其感谢您提供指向您的综合 MSDN 杂志文章的链接!这是我目前读过的关于 Web API 安全性的最佳读物!以上是关于cookie是干啥用的?怎么用?的主要内容,如果未能解决你的问题,请参考以下文章