会话和Cookie之间有什么区别?

时间:2009-03-08 16:26:59

标签: c# asp.net session cookies

会话和Cookie之间有什么区别?

每种情况应该使用什么情况?

8 个答案:

答案 0 :(得分:57)

会话

每个用户将

Sessions存储在服务器上的内存(或备用Session-State)中。会话使用cookie(会话密钥)将用户绑定到会话。这意味着用户计算机上的cookie中不存储“敏感”数据。

Sessions通常用于在浏览网站时维护状态。但是,它们也可用于保存常用对象。 仅当会话状态设置为InProc时,如果设置为另一个Session-State mode,该对象也必须可序列化。

Session["userName"] = "EvilBoy";

if(Session["userName"] != null)
  lblUserName.Text = Session["userName"].ToString();

<强>缓存

每个用户在用户计算机上存储

Cookies。 Cookie通常只是一些信息。 Cookie通常用于简单的用户设置颜色首选项等。 不应将任何敏感信息存储在Cookie中。

您永远不能完全相信cookie没有被用户或外部来源篡改,但是如果安全性是一个大问题并且您必须使用cookie,那么您可以加密您的cookie或将它们设置为仅通过SSL传输。用户可以随时清除自己的Cookie或完全不允许使用Cookie,因此您不能指望他们只是因为用户过去曾访问过您的网站。

//add a username Cookie
Response.Cookies["userName"].Value = "EvilBoy";
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(10);
//Can Limit a cookie to a certain Domain
Response.Cookies["domain"].Domain = "Stackoverflow.com";

//request a username cookie
if(Request.Cookies["userName"] != null)
   lblUserName.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);

旁注

值得一提的是,ASP.NET还支持cookieless状态管理

答案 1 :(得分:14)

Cookie 是变量的客户端存储。它通过浏览器物理存储在客户端机器上。它的范围是机器范围的。同一台机器上的不同用户可以读取相同的cookie。

因此:

  1. 您不应将敏感数据存储在Cookie中。
  2. 您不应存储属于一个用户帐户的数据。
  3. Cookie对服务器资源没有影响。
  4. Cookie会在指定日期到期。
  5. 会话是变量的服务器端存储。默认情况下,它存储在服务器的内存中。但是您可以将其配置为存储在SqlServer中。它的范围是浏览器范围。相同的用户可以运行两个或更多浏览器,每个浏览器都有自己的会话。

    因此:

    1. 您可以在会话中保存敏感数据。
    2. 您不应该在会话中保存所有内容。这是浪费服务器资源。
    3. 用户关闭浏览器后,会话超时会清除所有信息。 (默认为20分钟)

答案 2 :(得分:11)

Cookie是服务器(拥有域名)在访问服务器/域的用户的浏览器中存储的标识字符串。

会话是某个用户在特定时间范围内访问服务器/域时可能是变量,状态,设置的单位。所有会话信息都在存储在服务器上的传统模型中(!)

由于许多并发用户可以同时访问服务器/域,因此服务器需要能够区分许多不同的并发会话,并始终将正确的会话分配给正确的用户。 (并且没有用户可以“窃取”其他用途的会话)

这是通过cookie完成的。存储在浏览器中的cookie,在这种情况下应该是一个随机组合,如s73jsd74df4fdf(因此无法猜到)是从浏览器发送到服务器的每个请求上发送的,服务器可以分配和使用正确的会话它的答案(页面浏览量)

cookie允许服务器识别浏览器/用户。该会话允许服务器记住不同页面视图之间的信息。

答案 3 :(得分:2)

它可以同时具有:数据库主键被散列并存储在查找表中:然后散列作为cookie存储在客户端上。提交哈希cookie(hahhahaha :)后,将查找其对应的主键,其余的详细信息将与服务器数据库中的另一个表相关联。

答案 4 :(得分:1)

会话不依赖于允许cookie的用户。它们的工作方式类似于允许在用户打开浏览器时访问和传递信息的令牌。会话的问题是,当您关闭浏览器时,您也会丢失会话。因此,如果您有一个需要登录的站点,则无法将其保存为像cookie一样的会话,并且每次访问时都会强制用户重新登录。

答案 5 :(得分:1)

Session是服务器端对象, 在页面调用之间传输或访问数据 Cookies是客户端/客户端机器的对象,其存储浏览器和服务器的一些文本信息。

答案 6 :(得分:0)

  • Cookie和会话之间的主要区别在于Cookie存储在用户的浏览器中,而会话则不存储。这种差异决定了每种方法的最佳用途。

  • Cookie可以将信息保存在用户的浏览器中,直到删除为止。如果某人拥有登录名和密码,则可以在浏览器中将其设置为cookie,这样他们每次访问时都不必重新登录您的网站。您几乎可以在浏览器cookie中存储任何内容。

答案 7 :(得分:0)

关于会话cookie的内容似乎存在一些混淆。

首先,当我们谈论会话cookie时 - 它与ASP.Net会话无关。同样,会话cookie与服务器端进程或缓存无关。

会话cookie只不过是一个在浏览器会话到期时过期的cookie。要创建会话Cookie,请不要在其上设置过期日期。这样做会将cookie存储在内存中,并在浏览器处理完毕后丢弃。