session例子

会话session是客户和服务器之间的不断地请求相应序列。
状态是有记忆能力的。
web容器用httpsession代表会话对象。
案例1:session的初识:
这里就是创建了一个会话对象,用一个图表来获得会话对象的属性,这里访问次数设置了accessCount局部变量,注意这里设置的是Integer类型的,通过会话存储accessCount到accessCount1属性里,accessCount就有了状态,记忆功能,以至于之后访问都会+1
在这里插入图片描述

package com.rc.hui01;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.time.LocalTime;
import javax.servlet.annotation.WebServlet;

@WebServlet("/ShowSessionServlet")
public class ShowSessionServlet extends HttpServlet{
   public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
                       throws ServletException, IOException {
      response.setContentType("text/html;charset=utf-8");
      // 创建或返回用户会话对象
      HttpSession session = request.getSession(true); 
      String heading = null;
      // 从会话对象中检索accessCount属性
      Integer accessCount = (Integer)session.getAttribute("accessCount1");
      if(accessCount==null){
         accessCount = new Integer(1);
     	 heading = "欢迎您,首次登录该页面!";
      }else{
     	 heading = "欢迎您,再次访问该页面!";
     	 accessCount = accessCount+1;
      }
      // 将accessCount作为属性存储到会话对象中
      session.setAttribute("accessCount1",accessCount);
      PrintWriter out = response.getWriter();
      out.println("<html><head>");
      out.println("<title>会话跟踪示例</title></head>");
      out.println("<body><center>");
      out.println("<h4>"+heading
+"<a href='ShowSessionServlet'>再次访问</a>"+"</h4>");
      out.println("<table border='0'>");
      out.println("<tr bgcolor=\"ffad00\"><td>信息</td><td>值</td>\n");
      String state = session.isNew()?"新会话":"旧会话";
      out.println("<tr><td>会话状态:<td>"+state+"\n");
      out.println("<tr><td>会话ID:<td>"+session.getId()+"\n");
      out.println("<tr><td>创建时间:<td>");
      out.println(""+session.getCreationTime()+"\n");
      out.println("<tr><td>最近访问时间:<td>");
      out.println(""+session.getLastAccessedTime()+"\n");
      out.println("<tr><td>最大不活动时间:<td>"+
      session.getMaxInactiveInterval()+"\n");
      out.println("<tr><td>Cookie:<td>"+request.getHeader("Cookie")+"\n");
      out.println("<tr><td>已被访问次数:<td>"+accessCount+"\n");
      out.println("</table>");
      out.println("</center></body></html>");
   }
}


案例2:猜数字游戏:
在这里插入图片描述
这个是生成了一个随机数,把这个随机数保存在会话对象里面,然后和你输的值比较来显示不同的画面

package com.rc.hui01;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

@WebServlet("/GuessNumberServlet")
public class GuessNumberServlet extends HttpServlet{
   public void doGet(HttpServletRequest request,
                         HttpServletResponse response)
                         throws ServletException, IOException {
     int magic = (int)(Math.random()*101);
     HttpSession session = request.getSession();
     // 将随机生成的数存储到会话对象中
     session.setAttribute("num",new Integer(magic));
     
     response.setContentType("text/html;charset=utf-8");
     PrintWriter out = response.getWriter();
     out.println("<html><body>");
     out.println("我想出一个0到100之间的数,请你猜!");
     out.println("<form action='GuessNumberServlet' method='post'>");
     out.println("<input type='text' name='guess' />");
     out.println("<input type='submit' value='确定'/>");
     out.println("</form>");
     out.println("</body></html>");
   }
   
   public void doPost(HttpServletRequest request,
                           HttpServletResponse response)
                       throws ServletException, IOException {
     // 得到用户猜的数
int guess = Integer.parseInt(request.getParameter("guess"));
     HttpSession session = request.getSession();
     // 从会话对象中取出随机生成的数
int magic = (Integer)session.getAttribute("num");
     
     response.setContentType("text/html;charset=utf-8");
     PrintWriter out = response.getWriter();
     out.println("<html><body>");
     if(guess==magic){
     	 session.invalidate(); // 销毁会话对象
     	 out.println("祝贺你,答对了!");
     	 out.println("<a href ='GuessNumberServlet'>再猜一次.</a>");
     }else if(guess>magic){
     	 out.println("太大了! 请重猜!");
     }else{
          out.println("太小了! 请重猜!");
     }
     out.println("<form action='GuessNumberServlet' method='post'>");
     out.println("<input type='text' name='guess' />");
     out.println("<input type='submit' value='确定'/>");
     out.println("</form>");
     out.println("</body></html>");
   }
}


以下是一个简单的多用户 session 示例: ```go package main import ( "fmt" "net/http" "github.com/gorilla/sessions" ) var ( store = sessions.NewCookieStore([]byte("secret")) ) func main() { http.HandleFunc("/", index) http.HandleFunc("/login", login) http.HandleFunc("/dashboard", dashboard) http.ListenAndServe(":8080", nil) } func index(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "session-name") if session.Values["authenticated"] == true { http.Redirect(w, r, "/dashboard", http.StatusSeeOther) return } fmt.Fprint(w, "Index Page") } func login(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "session-name") username := r.FormValue("username") password := r.FormValue("password") if username == "user1" && password == "password1" { session.Values["authenticated"] = true session.Values["username"] = username session.Save(r, w) http.Redirect(w, r, "/dashboard", http.StatusSeeOther) return } http.Redirect(w, r, "/", http.StatusSeeOther) } func dashboard(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "session-name") if session.Values["authenticated"] != true { http.Redirect(w, r, "/", http.StatusSeeOther) return } username := session.Values["username"].(string) fmt.Fprintf(w, "Welcome %s to Dashboard", username) } ``` 在这个示例中,我们首先在 `index` 处理函数中检查用户是否已经通过身份验证并重定向到仪表板页面。如果用户没有通过身份验证,则显示登录表单。 在 `login` 处理函数中,我们检查用户提供的用户名和密码是否匹配。如果用户名和密码匹配,则设置 `authenticated` 和 `username` session 值,保存 session 并重定向到仪表板页面。如果用户名和密码不匹配,则重定向回主页。 在 `dashboard` 处理函数中,我们首先检查用户是否已通过身份验证。如果没有,则重定向回主页。如果用户已通过身份验证,则从 session 中获取用户名并欢迎用户进入仪表板页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值