public class ServletDemo extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
Cookie cookie = new Cookie("url","mkyong dot com");
cookie.setMaxAge(60*60); //1 hour
response.addCookie(cookie);
pw.println("Cookies created");
}
}
我正在看Java Stack概念。 cookie上有很多东西,当需要在客户端存储小数据时使用它。
但是请你告诉我,我们什么时候应该准确地使用Cookies?
当饼干比会话更好?
答案 0 :(得分:2)
这一系列设计决策的一部分与我们在系统中涉及多台计算机时需要保留状态信息的位置有关。
当你说“session”时,我怀疑你的意思是servlet容器将为你管理的HttpSession。实际上很可能HttpSession实际上是通过使用cookie来维护的:cookie只是拥有会话表的某种键。
这种将一些减少的数据量传递回浏览器并让服务器跟踪主要内容的模式也很常见。有时人们会使用全部三种:比如说小东西的cookie,HttpSession作为方便的缓存,以及他们真正关心的东西的数据库。
有很多因素需要考虑,这里有几个:
就个人而言,我发现通常HttpSession API非常方便,我从不选择使用cookie。我的经验法则是“如果它很容易重新创建,请将其保留在HttpSession中,否则请确保它存在于数据库中,必要时创建专门用于状态管理的数据库(并且不要忘记该数据库的内务管理)。
可重新创建的东西的例子:从数据库中检索的项目(我们总是可以再次获取它们),用户不介意重新输入的内容(比如一些搜索条件)。不可重新创建的示例:17页已完成的保险申请表。
答案 1 :(得分:1)
Cookie不如会话安全。
会话由服务器完全控制。在这两种情况下,客户端都需要安全地呈现真实的会话数据,但使用cookie时,有更多的机会可以隐藏内部发生的事情。 cookie偷窃的后果通常比盗窃不透明的会话ID更糟糕。
由于服务器没有设置会话数据库等,因此可以更快地开发Cookie,但如果您关心设计,它们将是一种质量较低的解决方案。
答案 2 :(得分:1)
要回答您的具体问题,当Cookie可以执行您无法使用会话执行的操作时,Cookie会优先于会话。我认为有两个理由可以使用它们: