session :setAttribute() 作用域 一次會話
會話:指的是 一個會話就是一個瀏覽器和服務器之間的通話,會話可以在多次請求中保存和使用數據
服務器端使用的記錄客戶端狀態的機制————sessionID 有一個方法 session.getId();
session是單用戶的、多頁面共享的,session是保存再服務器端的
【清除session 與 過期 】
方法1:程序主動清楚session數據
*方式一:設置會話失效:session.invalidate(); 【invalidate//使無效】
public void setMaxInactiveInterval(int interval(秒));// inactive不活躍的 intrval 時間(秒)
*方式二:
設置項目上的配置文件 WEB_INF/web.xml
<session-config>
<session-timeout>30</session-timeout> <!--30分鍾-->
</session-config>
方法2:移除會話屬性
public void removeAttribute(String name);
session.setAttribute("name",input_name);//input_name 用戶輸入的實際值,name 設置屬性的名稱 遂以其
session.removeAttribute("name");//移除屬性名
[登錄頁]
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2019/3/2
Time: 15:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="doLogin.jsp" method="get">
用戶名:<input type="text" name="name" required/><br/> <%--這里的 required 屬性是必填項的意思--%>
密碼: <input type="password" name="pwd"/><br/>
<input type="checkbox" name="xuan" value="love1">喲用、<br/>
<input type="checkbox" name="xuan" value="love2">哈哈、<br/>
<input type="checkbox" name="xuan" value="love3">呵呵、<br/>
<input type="checkbox" name="xuan" value="love4">嘻嘻<br/>
<input type="submit" value="注冊"/><br/>
<%
String register = (String)request.getAttribute("register");//獲取轉發后的值
if(register!=null){
out.print(register);
}
out.print(session.getId());
%>
</form>
</body>
</html>
【服務端頁面】
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2019/3/9
Time: 11:32
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ page import="java.net.URLEncoder" %>
<html>
<head>
<title>Title</title>
</head>
<body>
歡迎你
【中文亂碼處理】 如:客戶端以post方式提交的話
<%
request.setCharacterEncoding("UTF-8");//請求的編碼方式設置為utf-8
%>
<%
response.setCharacterEncoding("utf-8");//設置相應時的編碼方式為utf-8
%>
<%
//對面客戶端提交數據給我這邊,我現在要在這個服務端獲取客戶端提交的數據
//通過一個內置對象 getParameter獲取單個值 getParameterValues()獲取多個值
String name = request.getParameter("name");//獲取單個值
String pwd = request.getParameter("pwd");//獲取單個值
String[] xuan = request.getParameterValues("xuan");//獲取多個值【區別 getParameter 多了個values】
%>
<br/> 獲取到的信息如下:<%=name%> <br/><%=pwd%>
<br>用戶選擇的多個值內容是(愛好):
<%
if (xuan!=null){
for(String x:xuan){
out.print("<br/>"+x);
}
}else{
out.print("您沒有選擇多個值,如愛好");
}
%>
<%
//【練習】模擬登錄后 歡迎誰誰登錄成功
if(name.equals("admin")){//如果用戶名是admin則注冊失敗,因為已經有了這個用戶名
//提示用戶注冊失敗
request.setAttribute("register","注冊失敗");
//跳轉到原注冊頁面【轉發】 通過請求對象 獲得一個 內部的分發器,跳轉到***.jsp去,並攜帶我的request && response
request.getRequestDispatcher("login.jsp").forward(request,response);
//原理注意,當使用dispatcher的時候,它的頁面並不會直接到login.jsp去,而是服務器內部默認到login.jsp 去,實際
// 上你還是在本頁面(doLogin.jsp)中訪問 login.jsp 屬於一次 請求 服務器行為
}else{//如果不是admin則注冊成功,跳到注冊成功頁
//記錄用戶名或者密碼,再到登錄成功頁面獲取到這個值 並顯示出來歡迎***登錄本網頁
session.setAttribute("name",name);//設置了session的屬性和值
session.setMaxInactiveInterval(5);//session.setAttribute("name",name);在定義了session的值后,設置了它的有效期為5秒
response.sendRedirect("loginSucceed.jsp");
}
//request.getContextPath() 這個方法是獲取當前頁面的位置的上下文路徑
%>
</body>
</html>
【驗證成功頁面】
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2019/3/9
Time: 14:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登錄成功</title>
</head>
<body>
注冊成功頁面<br>
歡迎你,
<%
Object name = session.getAttribute("name");//注意這里取出來的是Object類型的,所以需要轉型
if(name!=null){
out.print(name.toString());
}
%>登錄 <br>
<a href="loginOut.jsp">注銷</a>讓會用點擊注銷后 使session過期
打印sessionId<% out.print(session.getId());%>
</body>
</html>