クッキーフリーのログインケースとクッキー保存セッション

メインコンテンツ:

csdnのアカウントにログインする場合は、ログイン後、ブラウザを閉じてください。しばらくしてからcsdnを再度開くと、アカウントがログインしていることがわかります。では、これはどのように達成されますか?次に実装しましょう。

アイデアとコード分析:

  1. まず、アカウントにログインする必要があります。ログイン後、ユーザー情報がセッションに保存されます。(セッションストレージを使用する目的は、後でブログを作成したり、ブログをブックマークしたりするときに、アカウントにログインしていることを確認することです)。
   HttpSession session = request.getSession();
   User user = userService.loginUser(username, password);
       session.setAttribute("user",user);
    
   
  1. Cookieを使用してユーザーのセッション情報を保存するため、ブラウザを閉じてセッションに再度アクセスすると、現在のセッションは閉じる前のセッションと同じになり、元のセッション情報を取得できます。(セッションはサーバーに保存され、Cookieはブラウザに保存されます。セッションはCookieに依存します。セッションを作成すると、ブラウザはこのセッション全体を保存するためにキー名JSESSIONIDのCookieを生成します。 2番目のセッションの情報ですが、ブラウザを閉じるとJSESSIONIDの値が再割り当てされ、ブラウザを閉じる前のセッション情報を取得できません)。
//session.getId();此处的session就是对应上方的session
//获取登录账户的session  
//session是服务器储存,但是当浏览器关闭,服务器不关闭时重新打开浏览器。两次的session不是同一个。所以需要通过cookie保留原来的session数据
   			   Cookie userCookie = new Cookie("JSESSIONID",session.getId());
         	   userCookie.setMaxAge(60*60);//我这里设置的存活时间为一个小时
                 response.addCookie(userCookie);
  				   //获取用户名            
 				  Cookie usernameCookie= new Cookie("username",user.getUsername());
  				 //获取密码
                 Cookie passwordCookie = new Cookie("password",user.getPassword());

                 //设置cookie存活一小时
                 usernameCookie.setMaxAge(60*60);
                 passwordCookie.setMaxAge(60*60);
               
				//将cookie响应回去	
                 response.addCookie(usernameCookie);
                 response.addCookie(passwordCookie);
       
我们这时候已经登陆了(第一次登录)。
我们把账号和密码也存到cookie里面,用于之后每次打开浏览器后的用户判断,判断浏览器是否存在我们的信息,从而决定我们是否需要重新登录账号
                 
  1. この時点で、ブラウザを閉じてからブラウザを開くと、2回取得したセッションの値は同じであり、前のユーザーのアカウント情報がCookieに保存されています。次に、ログイン判定を行います。(例として私のプロジェクトのコードを取り上げてください)
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("utf-8");
        //存放cookie信息的map集合
        Map<String,String> cookieMap = new HashMap<>();
      
        //获取之前存放的cookies的信息
          Cookie[] cookies = request.getCookies();

          //获取cookie
            //1.先判断是否有cookie
          if (cookies!=null&&cookies.length!=0){
    
    
              System.out.println("有cookie信息,判断该用户");
              for (Cookie cookie:cookies){
    
    
              //2.往集合中存入用于用户名和密码判断的cookie值
                  if (cookie.getName().contains("username")||cookie.getName().contains("password")){
    
    
                      cookieMap.put(cookie.getName(),cookie.getValue());
                  }

              }
              //3.分别获取cookie存放的用户名和密码,用于验证(万一我要是修改了用户名密码,浏览器保存的是之前的,所以要先验证)
              String username = cookieMap.get("username");
              String password = cookieMap.get("password");
               //进行数据库访问
              User user =userService.loginUser(username, password);
               //判断是否存在
              if (user!=null){
    
    
                  //验证成功,直接登陆查看blog
                  System.out.println("用户信息已经存在,可以直接登陆了");
                 //既然数据库中有信息,说明验证成功,我就可以直接跳转到我的blog的页面了。
                  response.sendRedirect("/aishangboke/pageSearchServlet");
              }
              if (user==null){
    
    
                  //验证失败,重新登陆查看blog
                         //既然数据库中没有,说明验证失败,我就直接跳转到登陆页面重新登陆了。response.sendRedirect("/aishangboke/view/login.jsp");
              }
          } else{
    
    
          //如果cookie的长度为0,说明浏览器中没有存放cookie或者存放的cookie信息已经过期,跳转到重新登陆页面
              System.out.println("没有cookie信息,进行登陆");
              response.sendRedirect("/aishangboke/view/login.jsp");
          }
    }

概要

コアログインケースのコード変換は上記のとおりです。

サーバーの実行中に、Cookieを判断するためのインターフェイスを作成できます。1。Cookieが存在しない場合は、ログインしていないことを意味します。ログインページにジャンプしてアカウントにログインできます。2. Cookieが存在する場合は、ログイン者情報の私のブログページ(例としてcsdnblogを取り上げます)に直接ジャンプして、ブログを直接表示できます。

後続のコードはCookieとは関係ありません。Cookieは、ここで2つの機能を果たしていると言っているのと同じです。1。前回のログインのセッション情報を格納します。2.アカウントのログインを判断します。

問題:

ログインユーザーのパスワードは安全ではないCookieに直接保存されますが、ユーザーのアカウントとパスワードは簡単に盗まれる可能性があるため、応答を暗号化する必要があります。暗号化操作は将来更新されます。

おすすめ

転載: blog.csdn.net/zhang19903848257/article/details/107818861