2.5仿牛客社区项目———登录退出(创建登录凭证ticket,放入cookie)

重点:登录时,浏览器提交表单后,先检查session中的验证码是否正确,然后看账号、密码是否为空,是否正确,最后生成凭证ticket存在login_ticket这个表中。这个ticket是generateUUID()生成的,这个表还存了userId,status(退出时变为1),失效时间(如果点击记住我,失效时间延长)。创建cookie,ticket放入,再把cookie放到response对象里,发给客户端。
至于为什么验证码要用session和ticket为什么要用cookie还是不太理解,后续填坑。
2.5仿牛客社区项目———登录退出(创建登录凭证ticket,放入cookie)_第1张图片

2.5仿牛客社区项目———登录退出(创建登录凭证ticket,放入cookie)_第2张图片

2.5仿牛客社区项目———登录退出(创建登录凭证ticket,放入cookie)_第3张图片
login_ticket表:
在这里插入图片描述
id是主键
ticket凭证(UUID生成)
status登录状态(0有效 1无效)
expired过期时间
ticket由服务器发给浏览器,作为cookie保存在浏览器,其他信息在服务端保存。下次服务端收到了cookie识别出是来自哪个浏览器,并可取出其他信息。

写程序的顺序:数据访问层->业务->表现层

一、登录功能

1、Dao数据访问层(data access objects)

实体类、sql表、Mapper接口、Mapper映射器相对应~~

(1) 实体类entity:LoginTicket.class

5个属性id、userId、ticket、status、expired,getset方法,重写toString

public class LoginTicket {

    private int id;
    private int userId;
    private String ticket;//凭证字符串
    private int status;//状态0有效1无效
    private Date expired;//到期日期

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getTicket() {
        return ticket;
    }

    public void setTicket(String ticket) {
        this.ticket = ticket;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Date getExpired() {
        return expired;
    }

    public void setExpired(Date expired) {
        this.expired = expired;
    }

    @Override
    public String toString() {
        return "LoginTicket{" +
                "id=" + id +
                ", userId=" + userId +
                ", ticket='" + ticket + '\'' +
                ", status=" + status +
                ", expired=" + expired +
                '}';
    }
}

(2) 数据访问层接口LoginTicketMapper.java
三个方法:插入、查询、退出
这里就没在xml上写了,直接用注解实现sql语句。

@Mapper
public interface LoginTicketMapper {

    //实现sql语句:可以在xml里写,也可以通过注解,字符串拼接成,书写方便,每行字符串加一个空格,主键自动生成
    @Insert({
            "insert into login_ticket(user_id,ticket,status,expired) ",
            "values(#{userId},#{ticket},#{status},#{expired})"
    })
    @Options(useGeneratedKeys = true, keyProperty = "id")//希望主键id是自动生成的,生成的值注入给对象,指定属性id
    int insertLoginTicket(LoginTicket loginTicket);//插入输出,影响行数

    @Select({
            "select id,user_id,ticket,status,expired ",
            "from login_ticket where ticket=#{ticket}"
    })
    LoginTicket selectByTicket(String ticket);//查询,依据ticket,ticket是凭证,发送给cookie浏览器存,其他的在服务器存,下次cookie给服务器,服务器查到其他的数据,ticket唯一标识

    //退出,状态改变
    @Update({
            ""
    })//动态sql,if怎么用? 
                    
                    

你可能感兴趣的:(仿牛客社区项目)