目录
使用session对象实现页面访问控制
使用Cookie实现保存已访问的信息
使用application对象实现统计在线人数
什么是会话
一个会话就是浏览器与服务器之间的一次通话,包含浏览器与服务器之间的多次请求、响应过程
什么是Cookie
Cookie是Web服务器保存在客户端的一系列文本信息 Cookie的作用 对特定对象的追踪 统计网页浏览次数 简化登录 安全性能 容易信息泄露
Cookie的语法
导入包
import="javax.servlet.http.Cookie"
创建Cookie parameter:用于代表cookie的名称(key)
value:用于表示当前key名称所对应的值 写入Cookie
类型 | 方法名称 | 说 明 |
void | setMaxAge(int expiry) | 设置Cookie的有效期,以秒为单位 |
void | setValue(String value) | 在Cookie创建后,对Cookie进行赋值 |
String | getName() | 获取Cookie的名称 |
String | getValue() | 获取Cookie的值 |
String | getMaxAge() | 获取Cookie的有效时间,以秒为单位 |
Cookie与session的比较
session是在服务器端保存用户信息,Cookie是在客户端保存用户信息 session中保存的是对象,Cookie保存的是字符串 session随会话结束而关闭,Cookie可以长期保存在客户端 Cookie通常用于保存不重要的用户信息,重要的信息使用session保存
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="oracle.jdbc.driver.OracleDriver"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//设置编码方式
request.setCharacterEncoding("utf-8");
//接收表单提交过来的值:用户名 密码 根据name值取value值
String name=request.getParameter("aa");
String pwd=request.getParameter("bb");
//jdbc连接Oracle判断是否登录成功
//两个字符串
String URL="jdbc:oracle:thin:@localhost:1521:orcl";
String CNAME="oracle.jdbc.driver.OracleDriver";
//加载驱动
Class.forName(CNAME);
//创建连接
Connection con=DriverManager.getConnection(URL, "scott", "123");
//定义sql语句
String sql="select * from tb_0328 where sname=? and spwd=?";
//获得执行对象
PreparedStatement ps=con.prepareStatement(sql);
//给占位符赋值
ps.setString(1, name);//用name给第1个占位符赋值
ps.setString(2, pwd);//用pwd给第2个占位符赋值
//开始执行 获得结果集
ResultSet rs=ps.executeQuery();
//判断/遍历
if(rs.next()){
//说明登录成功
//跳转到新闻发布系统的主界面
/*session的应用场合:
1.记录用户登录状态 判断用户是否登录
2.建议大家可以保存User对象(uuid uname upwd urole)
3.session版的购物车(增删改查) List<Goods>
Cookie的应用场合:
1.简化登录 免登陆
2.历史记录(浏览记录)
浏览记录思路提示:
1.在阅读界面存Cookie(Cookie c=new Cookie(新闻的编号name,新闻的标题value);)
2.在主界面(admin.jsp)/游客界面(index.jsp)取出所有的Cookie 遍历打印value值
Cookie[] cs=request.getCookies;
for(Cookie c:cs){
out.print(c.getValue());
}
需要解决三个问题:
1.解决中文乱码问题 :URLEncoder URLDecoder
2.解决用户名和sessionID问题
3.解决Cookie跨域问题
*/
//记录用户的登录状态/信息
//session.setAttribute("uname",name);//键String,值Object
//设置session的最大有效非活动时间 10秒
//session.setMaxInactiveInterval(10);
//打印session的编号:862FF3298197894980E3B9C62B093009
//System.out.print(session.getId());
//Cookie
Cookie c=new Cookie("xname",name);//name,value
//设置Cookie的有效期10s 一周内免登录
c.setMaxAge(60*60*24*7);//复选框
//加入响应
response.addCookie(c);
//重定向
response.sendRedirect("news/admin.jsp");
//转发 可以传值
//request.getRequestDispatcher("news/admin.jsp").forward(request, response);
}
else{
//说明登录失败
out.print("<script>alert('用户名或者密码有误');location.href='login.jsp';</script>");
}
//关闭资源 3个
if(con!=null&&!con.isClosed()){
con.close();
}
if(ps!=null){
ps.close();
}
if(rs!=null){
rs.close();
}
%>