实现主页识别用户是否登录(cookie)

515 阅读1分钟

1.实现方法

使用cookie保存用户数据,在登录成功时,后台保存用户数据并生成cookie,在用户访问主页,触发事件,后台查看是否有保存的cookie并返回验证,前台看验证情况分别显示。

2.代码展示

UserLogin.java(用户登录)

package controller;

import bean.User;
import service.impl.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.sql.SQLException;
@WebServlet("/login")
public class UesrLogin extends HttpServlet {
    UserService service=new UserService();
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        String checkbox=req.getParameter("checkbox");
        User user=new User();
        user.setUsername(username);
        user.setPassword(password);
        boolean result=service.Login(user);
        if(result){
            writer.write("true");
            User_cookie(username,resp,req);
        }else {
            writer.write("false");
        }

    }
    public static void User_cookie(String username,HttpServletResponse resp,HttpServletRequest req){
        Cookie coo = new Cookie("username", username);
        coo.setMaxAge(60*60*24*7);
        resp.addCookie(coo);
//        System.out.println(req.getRequestedSessionId());
    }
}

UserIndex.java(主页)

package controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/index")
public class UserIndex extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie user_cookie[] = req.getCookies();
        boolean isLogin=false;
        String username=null;
        PrintWriter writer=resp.getWriter();
        if (user_cookie != null){
            for(int i=0;i<user_cookie.length;i++){
                if(user_cookie[i].getName().equals("username")){
                    username=user_cookie[i].getValue();
                }

        }
        }
        System.out.println(username);
        writer.write(username);
    }
}

前端:

<script type="text/javascript">
		window.onload = CheckUser;
		function CheckUser(){
			$.ajax({
				type: "get",
				url: "/index",
				success: function (username) {
					if (username !== null || username !== undefined || username !== ''){
						$(".login_info").css({"display":"inline"});
						document.getElementById("username_login").innerText=username;
						$(".login_btn").css({"display":"none"});

					}
				}


			})
		}

	</script>
<div class="fr">
				<div class="login_info fl">
					欢迎您:<em id="username_login"></em>
				</div>
				<div class="login_btn fl" >
					<a href="login.html">登录</a>
					<span>|</span>
					<a href="register.html">注册</a>
				</div>
				<div class="user_link fl">
					<span>|</span>
					<a href="user_center_info.html">用户中心</a>
					<span>|</span>
					<a href="cart.html">我的购物车</a>
					<span>|</span>
					<a href="user_center_order.html">我的订单</a>
				</div>
			</div>
		</div>		
	</div>

3.结果展示

当用户未登录进入主页时,显示登录和注册,不显示用户名。

前台未登录.png

后台显示null

后台.png

当用户登录后进入主页,不显示登录和注册,显示用户名。

前台登录.png

后台可以看到用户数据

后台1.png