Поскольку протокол http не имеет состояния, необходимо использовать сеанс для записи состояния клиента, например сценарий корзины покупок, сервер создает специальный сеанс, чтобы пользователь мог идентифицировать и отслеживать пользователя.
Существует множество способов сохранения сессий на сервере, включая память, базу данных и файлы.
Рассмотрите возможность переноса сеансов при кластеризации. На крупных веб-сайтах будут выделенные кластеры серверов сеансов для сохранения сеансов пользователей. В настоящее время сеансы обычно хранятся в памяти.
Как сервер идентифицирует конкретного клиента?
Для каждого HTTP-запроса клиент отправляет на сервер ответный файл cookie. Большинство приложений используют файлы cookie для отслеживания сеансов.
Когда сессия создается в первый раз, сервер сообщает клиенту в протоколе http, что id сессии нужно записать в класс cookie, после каждого запроса id будет отправляться в базу данных, и я буду знать кто ты.
Если ваш браузер отключает файлы cookie, вы можете использовать перезапись URL для отслеживания сеанса.
Сценарий входа в файл cookie, после того, как вы вошли на веб-сайт один раз, при втором посещении не требуется вводить пароль учетной записи для автоматического входа, то есть запись информации в файл cookie, когда вы посещаете веб-сайт, сценарий страница веб-сайта считывает файл cookie и автоматически заполняет имя пользователя для вас
Cookie
механизм cookie
содержимое кукиCookieAPI
Создание и отправка файлов cookie
@WebServlet("/sendCookie")
public class sendCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建cookie
Cookie cookie=new Cookie("name","zqf");//只能存字符串,和域对象不一样
//发送cookie到客户端
response.addCookie(cookie);
}
}
При первом посещении видно, что заголовок ответа содержит файл cookie, который отправляется клиенту.
При втором посещении вы можете увидеть, что заголовок запроса также содержит файлы cookie, которые сервер отправляет клиенту и сохраняетКуки на уровне сеанса, а это значит, что браузер начинает закрываться, а куки исчезают при закрытии браузера, но иногда почему то не исчезают, потому что для куки установлено время сохранения на клиенте
Установить время сохранения куки
cookie.setMaxAge(10*60*1000);
设置cookie在浏览器中存储时间为10分钟,到时间自动删除cookie信息
Установить путь переноса файлов cookie
cookie.setPath("/");访问服务器下所有资源都携带这个cookie
cookie.setPath("/项目名/当前页面");则访问当前页面才携带cookie
Удалить файлы cookie.
@WebServlet("/removeCookie")
public class removeCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//删除客户端保存name-xxx的cookie信息
Cookie cookie=new Cookie("name","");
//设置时间为0
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
получить печенье
@WebServlet("/getCookie")
public class getCookie extends HttpServlet {
//获得cookie的值
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies) {
String cookieName = cookie.getName();
if(cookieName.equals("name")) {
String cookieValue = cookie.getValue();
System.out.println(cookieValue);
}
}
}
}
Session
Технология сеанса основана на Cookie, Технология Cookie Магазины сеанса Номер сеанса --jsessionId
Механизм сеанса
session是一种服务度机制,类似散列表结构来存储用户数据
浏览器第一次向客户端发送请求时,服务器会自动生成一个session和sessionid
sessionid唯一标识这个session
服务器响应时把sessionid发送给浏览器
浏览器第二次向服务器发送请求时就会携带这个sessionid
服务器通过这个id找到对应的session获取用户数据
недостатки сеанса
cookie被禁止,session也会被禁止,可以通过url重写摆脱托cookie
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份
Session数据放在服务器上,Cookie数据存放在客户的浏览器上
жизненный цикл сеанса
жизненный цикл
创建
第一次执行request.getSession()时创建
销毁
服务器(非正常)关闭
Session过期
tomcat下web.xml自动配置
手动销毁
session.invalidate();
Когда сервер отключается, сеанс уничтожается?
不对,有时间的,看session是否过期
Разница между сеансом и файлом cookie
session保存在服务器,cookie保存在客户端
session中保存的时对象,cookie保存的是字符串
session不能区分路径,同一个用户访问一个网站期间,所有的session在任何一个地方都可以访问
cookie如果设置路径,则在某些地方不能访问
session需要借助cookie才能正常工作,如果禁用cookie,session则失效
客户端会在发送请求的时候,自动将本地存活的cookie封装在信息头发送给服务器
Сценарии приложений сеанса и файла cookie
session上下文机制,针对每一个用户,通过sessionid来区分不同客户
session是以cookie或url重写为基础的,默认使用cookie实现,系统会创造一个名为jsessionid的输出cookie
重要状态走session,不重要走cookie,登陆信息用session,购物车用cookie