发表于: 2017-10-27 23:34:40

1 723


今天完成的事情:

今天完成的事情:

1.session是随着动态页面的生成而产生的也就是你打开首页就会生成一个session,它随着浏览器的关闭而消失

2.http九大内置对象四大域

3.

实现第一次登录之后然后再打开网页实现自动登录.

实现思路:第一次登录之后我会在本地浏览器里留下一个cookie,cookie的有效期是5个小时(也就是说5个小时之内这个cookie一直存在.然后当我第二次打开网页输入localhost:8080/home,他会去执行我这个url下的方法,这个时候我首先判断这个cookie里面有没有我指定的名字为Tokencookie,假如存在,就代表着我已经登录成功,我可以进行如何操作了.因为我这个时候登录成功,我就要更新我的登录时间login_at,并且更新我的Token.为了我判断方便,不用每次都把cookie全都提出来遍历,我向jsp内置对象session内赋值(session作用的是这个会话,只要的浏览器不关闭都有用).我以后每次想进入限制的网页.直接判断session符不符合就行了.贴一下代码

//跳回主页

@RequestMapping(value = "")

public String home(Model model,HttpServletRequest request,HttpSession session,HttpServletResponse response) throws ServletException, IOException {

    model.addAttribute("allStudent", studentService.allStudentNum());

    model.addAttribute("allGraduates", studentService.allGraduateNum());

    model.addAttribute("excellentStudents", studentService.getExcellentStudents());

    //设置打开首页即登录,首先保证cookie有效

    Cookie[] cookies=request.getCookies();

    for(int i=0;i<cookies.length;i++){

        if (cookies[i].getName().equals("Token")) {

            try {

                DesUtil des = new DesUtil("JAVA");

                String Token = cookies[i].getValue();

                String decToken = des.decrypt(Token);

                String[] uls = decToken.split(",");

                String infoid = uls[0];

                java.util.Date dt = new Date();

                long login_at = dt.getTime();

                long info_id=Long.parseLong(infoid);

                session.setAttribute("infoidloginat" ,info_id+""+login_at);

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

    return "homeBody.page";

}

拦截器:

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {

    //检验session

    HttpSession session=request.getSession();

    if(session==null||session.getAttribute("infoidloginat")==null){

        response.sendRedirect("/jsp/login.jsp");

        return false;

    }

4.实现注销后删除sessioncookie

因为要在页面上点击注销按钮实现删除cookiesession

cookie没有删除功能,只能将他的maxage设置为0,就相当于删除了cookie了具体操作将代码

还有要将cookie的路径设置为"./"要不然假如路径不一样的话,他会直接重新新建一个maxage0token,就删除不了原来的cookie

//注销后删除cookiesession,返回首页

@RequestMapping(value = "/u/logout")

public String logout(HttpServletRequest request,HttpServletResponse response){

    Cookie[] cookies=request.getCookies();

    for(int i=0;i<cookies.length;i++){

        if(cookies[i].getName().equals("Token")){

            cookies[i].setMaxAge(0);

            cookies[i].setPath("/");

            response.addCookie(cookies[i]);

            request.getSession().removeAttribute("infoidloginat");

        }

    }

    return "redirect:/home";

}

5.拦截器重定向问题就不能写成这样了,因为只有现在路径是String类型的,那么它跳转时也是这样的.

写成这样

if(session==null||session.getAttribute("infoidloginat")==null){

    response.sendRedirect(request.getContextPath()+"/jsp/login.jsp");

    return false;

}

6.判断更换头部显示

原页面

登录后页面

登录前页面

jsp文件里判断使用哪段页面

</head>

<header>

    <c:choose>

        <c:when test="${loginLoginInfo!=null}">

        <div class="top">

            <p>客服电话:010-594-78634</p>

            <div class="top-right">

                <div class="wexin"></div>

                <div class="qq"></div>

                <div class="sina"></div>

            <div class="login" style="position:absolute; left:1160px; top:10px; ">${loginLoginInfo.info_user}</div>

            <div class="login" style="position:absolute; left:1190px; top:10px; "><a href="${pageContext.request.contextPath}/home/u/logout"  style="text-decoration:none">注销</a></div>

            <div class="" style="position:absolute; left:1220px; top:10px; "><a href="${pageContext.request.contextPath}/home/u/studentes" style="text-decoration:none">学员列表</a></div>

            <div class="" style="position:absolute; left:1280px; top:10px; "><a href="${pageContext.request.contextPath}/home/student" style="text-decoration:none"><img width="50" height="50" src=${pageContext.request.contextPath}${StudentPicture} ></a></div>

            </div>

        </div>

        </c:when>

        <c:otherwise>

            <div class="top">

                <p>客服电话:010-594-78634</p>

                <div class="top-right">

                    <div class="wexin"></div>

                    <div class="qq"></div>

                    <div class="sina"></div>

                    <div class="login" style="position:absolute; left:1160px; top:10px; "><a href="${pageContext.request.contextPath}/jsp/login.jsp" style="text-decoration:none">登录</a></div>

                    <div class="|" style="position:absolute; left:1190px; top:10px; ">|</div>

                    <div class="" style="position:absolute; left:1200px; top:10px; "><a href="${pageContext.request.contextPath}/jsp/register.jsp" style="text-decoration:none">注册</a></div>

                    <div class="" style="position:absolute; left:1280px; top:10px; "> <img width="50" height="50" src=${pageContext.request.contextPath}/image/home/logout.jpg ></div>

                </div>

            </div>

        </c:otherwise>

    </c:choose>

明天计划完成的事情:明天开始任务五

遇到的问题:

远程的图片出不来

原因:我在本地用的是相对路径,前面有两个点,把表上传到服务器没删除,后来我用绝对路径的时候,路径就报错了

 

收获:完善了一下项目,理一遍cookie思路



返回列表 返回列表
评论

    分享到