会话和Cookie之间有什么区别?
应该在什么情况下使用?
会议
会话按用户存储在服务器上的内存(或备用会话状态)中.会话使用cookie(会话密钥)将用户绑定到会话.这意味着用户计算机上的cookie中不存储"敏感"数据.
会话通常用于在浏览网站时维护状态.但是,它们也可用于保存常用对象.仅当会话状态设置为InProc时,如果设置为另一个会话状态模式,则该对象也必须可序列化.
Session["userName"] = "EvilBoy"; if(Session["userName"] != null) lblUserName.Text = Session["userName"].ToString();
饼干
Cookie按用户存储在用户计算机上.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还支持无cookie状态管理
Cookie是变量的客户端存储.它通过浏览器物理存储在客户端机器上.它的范围是机器范围的.同一台机器上的不同用户可以读取相同的cookie.
因为这 :
您不应该在cookie上存储敏感数据.
您不应存储属于一个用户帐户的数据.
Cookie对服务器资源没有影响.
Cookie会在指定日期到期.
会话是变量的服务器端存储.默认情况下,它存储在服务器的内存中.但是您可以将其配置为存储在SqlServer中.它的范围是浏览器范围.相同的用户可以运行两个或更多浏览器,每个浏览器都有自己的会话.
因为这 :
您可以在会话中保存敏感数据.
你不应该在会话中保存所有内容.这是浪费服务器资源.
用户关闭浏览器后,会话超时会清除所有信息.(默认为20分钟)
Cookie是由访问服务器/域的用户的浏览器中的服务器(具有域)存储的标识字符串.
会话是可能变量,状态,设置的单位,而某个用户在特定时间范围内访问服务器/域.所有会话信息都在存储在服务器上的传统模型中(!)
由于许多并发用户可以同时访问服务器/域,因此服务器需要能够区分许多不同的并发会话,并始终将正确的会话分配给正确的用户.(并且没有用户可以"窃取"其他用途的会话)
这是通过cookie完成的.存储在浏览器中的cookie,在这种情况下应该是一个随机组合,如s73jsd74df4fdf(因此无法猜到)是从浏览器发送到服务器的每个请求上发送的,服务器可以分配和使用正确的会话它的答案(页面浏览量)
cookie允许服务器识别浏览器/用户.会话允许服务器记住不同页面视图之间的信息.