发表于: 2020-06-30 21:16:50
1 1880
今天完成的事情:做登录注册的基本功能,了解Session,Cookie,Token。
明天计划的事情:明天做加盐吧。
遇到的问题:暂无。
收获:
Session,Cookie,Token各自的含义
Cookie
Cookie是Web服务器保存在客户端的小文本文件,里面包含了用户相关信息。Cookie默认时效是很和Session,即一个会话关闭后失效,当然也可以自己设置时间。执行路程是,客户端发送一个HTTP请求到服务器,服务器接受请求后,响应给客户端响应头中的Set-Cookie就是Cookie信息,浏览器保存Cookie,当浏览器第二次访问服务器时,会携带Cookie信息到服务器,识别后更新Cookie再次返回到浏览器保存。
Session
Session是对于服务端来说的,Session是一个会话,是服务器和客户端建立连接时添加的一个客户端连接标志,最终在服务器软件转化为一个临时的Cookie发送给客户端,当客户端第一次请求服务器时,会检查是否携带了这个Session(临时Cookie),如果没有则会添加Session,如果有就拿出这个Session来做相关操作。
为什么会出现Session?
因为Http是无状态的,每次访问都是从新发送新的请求,请求间没有任何联系,例如为了方便我们在一个网页登录后,进入相关网页不需要从新登录,当然只用Cookie也可以,但是因为Cookie是存储在客户端的,用户可见,并且可以随意修改,并不安全,Session存储服务器就弥补了安全问题。
Token
Token即令牌,用户身份的验证,简单组成:uid(用户唯一标识)+time(时间戳)+sign(签名)
当用户首次登录成功之后, 服务器端就会生成一个 token 值,这个值服务器保存在数据库中,再将这个token值返回给客户端,客户端拿到 token 值之后,进行本地保存。当客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器,服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值做对比。
对比一:如果两个 token 值相同, 说明用户登录成功过!当前用户处于登录状态!
对比二:如果没有这个 token 值, 则说明没有登录成功.
对比三:如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录.
登录注册功能
1.首先在数据库添加了user表保存用户信息,其实就是在学生表中添加了密码字段。然后添加用户表查询和新增接口功能,这里节不贴代码了,因为后面根据加盐还要修改。
2.简单登录注册页面
<body>
<div>
<form action="/user/login" method="post">
<table>
<tr>
<td class="td1">用户名</td>
<td><input type="text" class="input1" name="name"></td>
</tr>
<tr>
<td class="td1">密码</td>
<td><input type="password" class="input1" name="pwd"></td>
</tr>
<tr>
<td class="td1" colspan="2">
<input type="checkbox" name="remember" value="true" checked="checked"> 记住用户名</td>
</tr>
<tr>
<td colspan="2">
<div class="btn-red">
<input type="submit" value="登录" id="login-btn">
</div>
</td>
</tr>
</table>
</form>
</div>
</body>
<body>
<div class="reg">
<form action="/user/regist" method="post">
<table>
<tr>
<td class="td1">姓名</td>
<td><input type="text" class="input1" name="name"></td>
</tr>
<tr>
<td class="td1">密码</td>
<td><input type="password" class="input1" name="pwd"></td>
</tr>
<tr>
<td colspan="2">
<div class="btn-red">
<input type="submit" value="注册" id="reg-btn">
</div>
</td>
</tr>
</table>
</form>
</div>
</body>
控制层代码
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/loginpage")
public String doLogin(){
return "login";
}
@RequestMapping("/login")
@ResponseBody
public String dologin(User user){
String pwd = user.getPwd();
User user1 = userService.findOne(user);
if(user1.getPwd().equals(pwd)){
return "登录成功!";
}
return "登录失败!";
}
@RequestMapping("/registpage")
public String doregist(){
return "regist";
}
@RequestMapping("/regist")
public String doregist(User user, Map<String,Object> map){
int num = userService.insert(user);
return "login";
}
}
评论