本文共 1681 字,大约阅读时间需要 5 分钟。
会话可以简单理解为:用户开启浏览器,访问服务器多个web资源,直到关闭浏览器为止的整个过程。一次会话类似于打电话,浏览器相当于打电话的一方,发送请求后,服务器接通后,直到浏览器关闭,会话才结束。每个浏览器独立作为一个会话实体,即使同一台电脑打开不同浏览器访问服务器,也视为两个独立的会话。
Web程序中常用的会话跟踪技术是Cookie和Session。Cookie在客户端记录信息,Session在服务器端记录信息。Cookie通过在客户端保存用户数据,Session通过在服务器端保存用户数据,两者结合使用能够有效跟踪用户的整个会话过程。
服务器创建Cookie:服务器创建Cookie时,指定名称、值和其他属性(如路径、域名、有效期等),然后将Cookie添加到HTTP响应头中发送给浏览器。
浏览器保存Cookie:浏览器接收Cookie后,自动保存到本地存储中。
Cookie的使用:下次浏览器再次访问服务器时,会自动携带Cookie到请求头中,服务器可以通过读取Cookie值来识别用户身份。
大小限制:单个Cookie文件大小不超过4KB,超过此大小可能导致浏览器无法识别。
数量限制:一个web站点通常最多发送20个Cookie,浏览器可以存储多达300个Cookie。
安全性:Cookie本身不安全,可能泄露用户隐私信息。现代浏览器提供Cookie禁用选项。
生命周期:默认情况下,Cookie在浏览器关闭时销毁。
设置属性:可以设置Cookie的路径、域名、有效期等属性,确保Cookie仅在指定范围内使用。
记住用户名:登录时,服务器创建Cookie保存用户名,下次访问登录页面时,浏览器携带Cookie直接使用已保存的用户名。
购物车功能:浏览商品时,商品信息存入Cookie,下次访问购物车时,直接显示已保存的商品。
Session的创建:第一次请求访问服务器时,服务器为浏览器创建一个Session对象,并生成一个唯一的Session ID。
Session ID的传递:服务器将Session ID返回给浏览器,通常通过Cookie的方式保存。
Session的共享:浏览器携带Session ID发送下一次请求,服务器根据Session ID查找对应的Session对象,继续记录用户的操作。
获取Session:使用request.getSession()方法获取当前Session对象,若无Session则创建一个新的。
设置Session属性:通过session.setAttribute(key, value)方法存储用户数据,使用session.getAttribute(key)方法读取。
Session的生命周期:Session默认生命周期为30分钟内未活跃则销毁,开发者可以通过session.setMaxInactiveInterval(int interval)设置超时时间。
Session的销毁:可以手动调用session.invalidate()销毁Session,或者等待超时自动销毁。
URL重写:在浏览器禁用Cookie时,使用request.encodeRedirectURL()或response.sendRedirect()方法传递Session ID,确保Session能够正常工作。
持久化Session:服务器正常关闭时,Session会持久化保存至文件,避免数据丢失。
Cookie和Session是Web开发中常用的会话跟踪技术,各有优劣之处。Cookie通过客户端保存用户信息,适合需要在客户端维护状态的场景,而Session通过服务器端维护用户信息,适合需要共享数据的场景。两者结合使用能够更好地满足Web应用的需求。
转载地址:http://vhqfk.baihongyu.com/