Session / Cookie

์ด๋™์–ธยท2024๋…„ 7์›” 31์ผ

new world

๋ชฉ๋ก ๋ณด๊ธฐ
19/62
post-thumbnail

7.31 (์ˆ˜)

1. Session

๐Ÿ‘‰ ์„ธ์…˜์€ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด.
๐Ÿ‘‰ ์ƒํƒœ์œ ์ง€ : ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋”๋ผ๋„ ์œ ์ง€
๐Ÿ‘‰ ์ผ์‹œ์  : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์„ธ์…˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์„ธ์…˜ ์ •๋ณด๋Š” ์†Œ๋ฉธ
๐Ÿ‘‰ ์„ธ์…˜์€ ๊ฐ์ฒด๋ฅผ ์ €์žฅ๊ฐ€๋Šฅ.
๐Ÿ“Œ ์„ธ์…˜์—์„œ ์ค‘์š”ํ•œ์ ์€ ๋กœ๊ทธ์ธํ•œ ์œ ์ €์˜ ์„ธ์…˜ID๋ฅผ ์„ธ์…˜DB์— ์ €์žฅ์„ํ•˜๊ณ , ๊ทธ๋Ÿผ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋ฅผ ๋ฐ›์•„์„œ ์„ธ์…˜ID๋ฅผ ๋ณด๊ณ  ์„ธ์…˜DB๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ์„ํ•ด์„œ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•˜๋Š”๊ฒƒ์ด๋‹ค.




2. req.getSession( )

๐Ÿ‘‰ ๊ธฐ์กด์— session์ด ์—†์–ด์„œ ํ•ด๋‹น์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €์˜ ์„ธ์…˜์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
๐Ÿ‘‰ ๊ธฐ์กด์— session์ด ์žˆ์œผ๋ฉด, ๊ธฐ์กด์— ์„ธ์…˜์„ ๋ถˆ๋Ÿฌ์™€์„œ ์œ ์ง€ํ•œ๋‹ค.



3. req.getSession(false)

๐Ÿ‘‰ ๊ธฐ์กด์— session์ด ์—†์–ด๋„ ์„ธ์…˜์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.
๐Ÿ‘‰ ์ฃผ๋กœ ๋กœ๊ทธ์ธ์„ ํ•˜์ง€์•Š๊ณ  ํšŒ์›ํŽ˜์ด์ง€์— url๋กœ ํƒ€๊ณ ๋“ค์–ด์˜ค๋Š”๊ฒƒ์„ ๋ง‰๊ธฐ์œ„ํ•จ.



4. ๋กœ๊ทธ์ธ ์„ธ์…˜ ์ฝ”๋“œ ์ข…๋ฅ˜

๐Ÿ“Œ setAttribute : ๋กœ๊ทธ์ธํ•œ ํ›„ ์„ธ์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
๐Ÿ“Œ getAttribute : ๋กœ๊ทธ์ธ ์ดํ›„ ๋งˆ์ดํŽ˜์ด์ง€ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๊ฐ€์ ธ์˜ค๋Š”๊ฒƒ.
๐Ÿ“Œ removeAttribute : ๋กœ๊ทธ์•„์›ƒ์‹œ ์„ธ์…˜์—์„œ ์—†์• ๊ธฐ ์œ„ํ•จ.



5. LogIn Page ๊ฐœ๋ฐœ

5-1. Table ์ƒ์„ฑ

create table tbl_member (
                            mno int auto_increment primary key,
                            uid varchar(100) not null,
                            upw varchar(100) not null,
                            email varchar(200) not null,
                            delflag boolean default false
);
insert into tbl_member (uid,upw,email) values ('u1','1111','u1@aaa.com');
insert into tbl_member (uid,upw,email) values ('u2','1111','u2@aaa.com');

๐Ÿ‘‰ member ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ์ปฌ๋Ÿผ์œผ๋กœ๋Š” pk์ธ mno, id, pw, email, delflag(soft delete) ๋ฅผ ๋งŒ๋“ ๋‹ค.



5-2. MemberVO Class

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class MemberVO {
    private Integer mno;
    private String uid;
    private String upw;
    private String email;
    private boolean delFlag;
}

๐Ÿ‘‰ table๊ณผ ๋˜‘๊ฐ™์€ ์ปฌ๋Ÿผ์œผ๋กœ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋“ค์„ ๊ตฌ์„ฑํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.



5-3. MemberDAO enum

5-3-1. GET DAO

public Optional<MemberVO> get(String word, String pw) throws Exception {//id ํ˜น์€ email์ด๋‹ˆ๊นŒ word๋ผ๊ณ 

        String query = """
                select * from tbl_member
                where
                    (uid = ? or email = ? )
                and
                    upw = ?
                and
                    delflag = false
                """;

        @Cleanup Connection con = ConnectionUtil.INSTANCE.getDs().getConnection();
        @Cleanup PreparedStatement ps = con.prepareStatement(query);
        ps.setString(1, word);
        ps.setString(2, word);
        ps.setString(3, pw);

        @Cleanup ResultSet rs = ps.executeQuery();
        //select๋‹ˆ๊นŒ rs์‚ฌ์šฉํ•ด์ฃผ๊ณ .

        if (!rs.next()) {
            return Optional.empty(); //์˜›๋‚ ์—๋Š” null๋กœ ๋ฐ˜ํ™˜ํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” Optional์„ ์‚ฌ์šฉ.
        }
        //ํ•œ์ค„ ์ด๋™ํ•˜๊ณ 
        MemberVO member = MemberVO.builder()
                .mno(rs.getInt("mno")) //sql๋ฌธ์—์„œ *from์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด๋กœ ์ ๋Š”๊ฒƒ
                .uid(rs.getString("uid"))
                .upw(rs.getString("upw"))
                .email(rs.getString("email"))
                .delFlag(rs.getBoolean("delflag"))
                .build();

        return Optional.of(member);
    }

๐Ÿ‘‰ ์šฐ์„  ์•„์ด๋””๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ Optional์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
๐Ÿ‘‰ ๋กœ๊ทธ์ธ์€ uid, email ๋‘๊ฐœ์ค‘์— ํ•œ๊ฐœ๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ word๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์žก์•˜๋‹ค.
๐Ÿ‘‰ ์ด๋•Œ๊นŒ์ง€ ํ•œ๊ฒƒ ์ฒ˜๋Ÿผ select๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ•œ ๋ญ‰ํ……์ด๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ResultSet์‚ฌ์šฉํ•˜๊ณ , MemberVO ๊ฐ์ฒด ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ด์ค€๋‹ค.




5-3-2. Insert DAO

public Integer insert(MemberVO member) throws Exception {

        String sql = "insert into tbl_member (uid,upw,email) values (? , ? , ? )";

        @Cleanup Connection con = ConnectionUtil.INSTANCE.getDs().getConnection();
        @Cleanup PreparedStatement ps = con.prepareStatement(sql);
        ps.setString(1, member.getUid());
        ps.setString(2, member.getUpw());
        ps.setString(3, member.getEmail());

        Integer count = ps.executeUpdate();

        if(count!=1){
            throw new Exception("Abnormal insertion");
        }

        ps.close(); //ps๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ ps๋ฅผ ๋‹ซ๊ณ 
        ps = con.prepareStatement("select LAST_INSERT_ID()");

        @Cleanup ResultSet rs = ps.executeQuery();

        rs.next();
        Integer mno = rs.getInt(1);

        con.commit(); //ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹
        con.setAutoCommit(true); //ํŠธ๋žœ์žญ์…˜ ์˜คํ† ์ปค๋ฐ‹

        return mno;
    }

๐Ÿ‘‰ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ์œ„ํ•ด ํ•„์ˆ˜ ์š”์†Œ์ธ uid, upw, email์„ insert value๋กœ ์‚ฌ์šฉ.
๐Ÿ‘‰ dml ์ด๋ฏ€๋กœ executeUpdate ์ž์ฒด๊ฐ€ int๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ int count๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ›๊ณ , count ๊ฐ’์€ 1์ด์–ด์•ผ ํ•œ๋‹ค.
๐Ÿ‘‰ ํšŒ์›๊ฐ€์ž… ์ดํ›„์—๋Š” redirect๋ฅผ ํ†ตํ•ด์„œ login ํŽ˜์ด์ง€๋กœ ์ด๋™๋˜๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์œผ๋‹ˆ, mno๋ฅผ ๊ฐ€์ ธ์™€์•ผํ•  ์ด์œ ์™€ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค.
๐Ÿ‘‰ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด xxx๋‹˜ ๋กœ๊ทธ์ธ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๋ผ๋Š” modal์ฐฝ์— ํ•„์š”ํ• ๋“ฏ ํ•˜๋‹ค.



5-4. Login Controller


@WebServlet(value = "/login")
@Log4j2
public class LoginController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.getRequestDispatcher("/WEB-INF/login.jsp").forward(req, resp);//ํ™”๋ฉด๋งŒ ๋ณด์—ฌ์ฃผ๋Š”๊ฑฐ๋‹ˆ๊นŒ
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String uid = req.getParameter("uid");
        String upw = req.getParameter("upw");

        log.info("--------------");
        log.info(uid);
        log.info(upw);

        //Jsession_id๊ฐ€ ์„ธ์…˜ ์ €์žฅ์†Œ์— ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค.
        HttpSession session = req.getSession();

        //db์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
        //๊ฒฐ๊ณผ๊ฐ€ Optional๋กœ ๋‚˜์˜ฌํ…Œ๋‹ˆ๊นŒ ์‚ฌ์šฉ์ž๊ฐ€ ์—†์„๋–„๋ฅผ ์ƒ๊ฐํ•ด์ค˜์•ผํ•จ.
        try {
            Optional<MemberVO> result = MemberDAO.INSTANCE.get(uid,upw);

            // if else๋ฅผ ์ด์šฉํ•ด์„œ db์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒฐ๊ณผ๊ฐ’์ด ์—†์„๋•Œ๋Š” ๋กœ๊ทธ์ธ์˜ ์—๋Ÿฌ์ฐฝ,
            // ๊ฐ’์ด ์žˆ์„๋•Œ๋Š” mypage๋กœ ๊ฐ€๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋žŒ๋‹ค์‹์œผ๋กœ ๊ฐ€์ž.
            // ๋žŒ๋‹ค์‹ ํ•ด์„ : ์ฒซ๋ฒˆ์งธ๋Š” memberVO์™€ ๊ฐ™์€ ๊ฐ’(์ •์ƒ์ ์ธ๊ฐ’)์ด ์žˆ์„๋•Œ, ๋‘๋ฒˆ์งธ๋Š” ๊ฐ’์ด ์—†์„๋•Œ.
            result.ifPresentOrElse( memberVO -> {
                session.setAttribute("uid", memberVO);
                try{
                    resp.sendRedirect("/mypage");
                }catch (Exception e){
                    e.printStackTrace();
                }
            }, () -> {
                try {
                    resp.sendRedirect("/login"); //์ด๋Œ€๋กœ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋ฉด try-catch์‚ฌ์šฉ์„ ์š”ํ•จ.
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } );


        } catch (Exception e) {
            throw new RuntimeException(e);
        }



    }
}

๐Ÿ‘‰ ๋กœ๊ทธ์ธ์˜ GET์€ ํ™”๋ฉด๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ์„ํ•˜๊ณ 
๐Ÿ‘‰ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„๋•Œ ๊ธฐ๋Šฅ์ธ POST๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ, ์„ธ์…˜์„ ์ƒ์„ฑํ•ด์ฃผ๊ณ  GET๋ฉ”์†Œ๋“œ์—์„œ ๋งŒ๋“  uid,upw๋ฅผ ์ด์šฉ ํ• ๊ฒƒ์ด๋ผ Optional result๋กœ ๋ฐ›์•„์ค€๋‹ค.
๐Ÿ‘‰ ์ดํ›„์— db์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒฐ๊ณผ๊ฐ’์ด ์žˆ์„๋•Œ์™€ ์—†์„๋•Œ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ Redirect๋ฅผ ํ•ด์ค˜์•ผํ•˜๋ฏ€๋กœ if-else๋ฌธ์„ ์‚ฌ์šฉํ• ์ง€ ๋žŒ๋‹ค์‹์„ ์‚ฌ์šฉํ• ์ง€ ์ •ํ•ด์•ผํ•˜๋Š”๋ฐ ๋žŒ๋‹ค์‹์„ ์‚ฌ์šฉํ•จ.
๐Ÿ‘‰ result.ifPresentOrElse( memberVO -> {}, () -> {}) ์—์„œ ์ฒซ๋ฒˆ์งธ ์ค‘๊ด„ํ˜ธ์—๋Š” memberVO์— ์ •์ƒ์ ์ธ ๊ฐ’์ด ์žˆ์„๋•Œ์˜ Redirect๊ฒฝ์šฐ๋ฅผ ๋„ฃ๊ณ , ๋‘๋ฒˆ์งธ ์ค‘๊ด„ํ˜ธ์—๋Š” ๊ฐ’์ด ์—†์„๋•Œ์˜ Redirect๊ฒฝ์šฐ๋ฅผ ์ ์šฉํ•œ๋‹ค.



5-5. Logout Controller

@WebServlet(value="/logout")
@Log4j2
public class LogoutController extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //์„ธ์…˜์ด ๊ธฐ์กด์— ์—†์—ˆ์œผ๋ฉด ์ด ํŽ˜์ด์ง€๋กœ ๋“ค์–ด์™”์„๋•Œ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ
        HttpSession session = req.getSession(false);

        if(session == null) {
            resp.sendRedirect("/");
            return;
        }

        //removeAttrivute๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  invalidate๋งŒ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๋ฐ
        //invalidate๋Š” ๋ฐ”๋กœ ์ง€์›Œ์ง€๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ , ์‹œ๊ฐ„์ด ์ง€๋‚˜์•ผ ์—†์–ด์ง„๋‹ค.
        //๋ฐ”๋กœ ์—†์• ๋ฒ„๋ฆฌ๊ธฐ ์œ„ํ•ด์„  removeAttribute๋ฅผ ์‚ฌ์šฉ
        session.removeAttribute("uid");
        session.invalidate(); //๋ฌดํšจํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ž
        resp.sendRedirect("/");

    }
}

๐Ÿ‘‰ ๋กœ๊ทธ์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” getSession(false)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ์…˜์ด ์—†๋”๋ผ๋„ ์„ธ์…˜์„ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๊ณ , session๊ฐ’์ด ์—†๋‹ค๋ฉด Redirect๋ฅผ ํ†ตํ•ด ์ฒซํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ ๋‹ค.

๐Ÿ‘‰ session.invalidate๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌดํšจํ™”๋กœ remove๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹œ๊ฐ„์ด ์–ด๋А์ •๋„ ์ง€๋‚˜๊ณ  ์—†์–ด์ง„๋‹ค. ํ•˜์ง€๋งŒ ๋กœ๊ทธ์•„์›ƒ์‹œ์— ๋ฐ”๋กœ ์„ธ์…˜์ด ์—†์–ด์ง€๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  session.removeAttribute("uid")๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.




5-6. MyPage Controller

@WebServlet(value = "/mypage")
@Log4j2
public class MyPageController extends HttpServlet { //redirect๋กœ ๋ถˆ๋Ÿฌ์˜จ ์• ๋Š” get๋ฐฉ์‹์œผ๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        log.info("get");

        //๋กœ๊ทธ์ธํ•œ์ ์ด ์—†์ด url๋กœ ๋“ค์–ด์˜ค๋”๋ผ๋„ ์„ธ์…˜์„ ๋‹ค์‹œ ๋งŒ๋“ค์ง€์•Š๋Š”๋‹ค.
        //mypage์˜ url๋กœ ๋ฐ”๋กœ ๋“ค์–ด์˜ค๋Š”๊ฒƒ์„ ๋ง‰๊ธฐ์œ„ํ•ด
        HttpSession session = req.getSession(false);

        //๋กœ๊ทธ์ธํ–ˆ๋˜ ์„ธ์…˜์ด ์—†๋‹ค๋ฉด ๋กœ๊ทธ์ธ์ฐฝ์œผ๋กœ ๋ณด๋‚ด๋ฒ„๋ ค์•ผํ•จ.
        //๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  getAttribute๋กœ ๊ฐ€์ ธ์™”๋Š”๋ฐ ์—†๋‹ค๋ฉด ๋กœ๊ทธ์ธ์ฐฝ์œผ๋กœ ๋ณด๋‚ด๋ฒ„๋ ค์•ผํ•จ.
        if(session == null || session.getAttribute("uid") == null) {
            resp.sendRedirect("/login");
            return;
        }

        req.getRequestDispatcher("/WEB-INF/mypage.jsp").forward(req, resp);
    }
}

๐Ÿ‘‰ ๋งˆ์ดํŽ˜์ด์ง€๋ฅผ url์„ ํ†ตํ•ด ๋ฐ”๋กœ ๋“ค์–ด์˜ค๋Š”๊ฒƒ์„ ๋ง‰๊ธฐ์œ„ํ•ด session(false)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์„ธ์…˜์ด ์—†๊ฑฐ๋‚˜, ์„ธ์…˜์˜ ๊ธฐ๋ก์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด getAttribute("uid")๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๋งŒ์•ฝ ๋‘˜๋‹ค ํ•ด๋‹น์‚ฌํ•ญ์ด ์—†๋‹ค๋ฉด Redirect๋ฅผ ํ†ตํ•ด login ํŽ˜์ด์ง€๋กœ ๋ณด๋‚ธ๋‹ค.



5-7. Register Controller

@WebServlet(value="/mregister")
@Log4j2
public class RegisterController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        log.info("doGet");

        req.getRequestDispatcher("/WEB-INF/mregister.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        String uid = req.getParameter("uid");
        String upw = req.getParameter("upw");
        String email = req.getParameter("email");

        MemberVO member = MemberVO.builder()
                .uid(uid)
                .upw(upw)
                .email(email)
                .build();

        try {
            Integer tno = MemberDAO.INSTANCE.insert(member);
            resp.sendRedirect("/login");
        } catch (Exception e) {
            resp.sendRedirect("/login?error=input");
            throw new RuntimeException(e);
        }
    }
}

๐Ÿ‘‰ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์—์„œ๋Š” ๋‹ค๋ฅธ insert์™€ ๊ฐ™์ด GET์—์„œ๋Š” ํ™”๋ฉด๋งŒ ๋ณด์—ฌ์ฃผ๊ณ , ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„๋•Œ POST๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.
๐Ÿ‘‰ table์˜ not null์ธ uid, upw, email์„ ๊ตฌ์„ฑํ•˜๊ณ , MemberVO ๊ฐ์ฒด๋ฅผ ํ•œ๋ฒˆ์— ๊ตฌ์„ฑํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค.




5-8. login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/login" method="post">
        <div>
            <label>ID or Email</label>
        <input name="uid" type="text">
        </div>

        <div>
            <label>PassWord</label>
        <input name="upw" type="password">
        </div>

        <button>LOGIN</button>
    </form>

<div>
    <form action="/mregister">
        <button type="submit">Join</button>
    </form>
</div>
</body>
</html>




5-9. mypage.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>MyPage</h1>
    <h2>${uid}</h2>

    <form action = "/logout" method="post">
        <button>LOGOUT</button>
    </form>

</body>
</html>




5-10. mregister.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<style>
    h1{
        border-bottom: 3px solid grey;
        padding : 5px;
    }
</style>
    <h1>Member Register Page</h1>


<form action="/mregister" method="post">

    <div>
    <label>UserID</label>
    <input type="text" name="uid">
    </div>

    <div>
    <label>PassWord</label>
    <input type="password" name="upw">
    </div>

    <div>
    <label>UserEmail</label>
    <input type="text" name="email">
    </div>

    <button>Register</button>
</form>
</body>
</html>




6.Cookie

๐Ÿ‘‰ ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ์กฐ๊ฐ
๐Ÿ‘‰ ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋ฏ€๋กœ ๋™์ผํ•œ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ๋•Œ ์ด์ „์— ์ €์žฅ๋œ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ‘‰ ์ฟ ํ‚ค์—๋Š” ๋งŒ๋ฃŒ(expire) ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์„ ์ •ํ• ์ˆ˜ ์žˆ์–ด ๊ทธ ์‹œ์ ๊นŒ์ง€ ์ง€์†๋  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ‘‰ ์˜ˆ๋ฅผ๋“ค์–ด ์–ด๋А ์›น์‚ฌ์ดํŠธ์—์„œ ํ•œ๊ตญ์–ด ์„ค์ •์„ ํ•ด๋‘๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๋ฉด ์–ธ์–ด ๋ณ€๊ฒฝ ์ฟ ํ‚ค ๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €์— ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ์— ํ•ด๋‹น ์›น์‚ฌ์ดํŠธ์— ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๋ฉด ์„ค์ •ํ•ด๋‘์—ˆ๋˜ ์–ธ์–ด๋กœ ์ž๋™ ๋ฒˆ์—ญ์ด ๋œ๋‹ค.
๐Ÿ‘‰ ์ฟ ํ‚ค๋Š” ๋ฌธ์ž์—ด๋งŒ ์ €์žฅ๊ฐ€๋Šฅ(ํ•œ๊ธ€๋ฌธ์ œ) ๋ฐ ๋„๋ฉ”์ธ๋‹น ์ฟ ํ‚ค์˜ ์ œํ•œ์ด ์žˆ์Œ.



7.Cookie example

7-1. MakeController


@WebServlet("/goods/make")
@Log4j2
public class MakeController extends HttpServlet { //get๋ฐฉ์‹์œผ๋กœ test ํ•ด๋ณด๊ธฐ

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        log.info("doGet");

        Cookie goodsCookie = new Cookie("goods", "123456789"); //ํ‚ค ์™€ ๊ฐ’ ํ˜•ํƒœ์ด๋ฏ€๋กœ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉ
        //goodsCookie.setPath("/");

        goodsCookie.setMaxAge(60*60); //์ดˆ ๋‹จ์œ„ ๊ณ„์‚ฐ์ด๋ฏ€๋กœ = 1์‹œ๊ฐ„

        resp.addCookie(goodsCookie); //๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘๋งŒ๋“  ์ฟ ํ‚ค๋‹ˆ๊นŒ ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌ ํ•ด์ค˜์•ผํ•จ.


    }
}

๐Ÿ‘‰ goods๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐ’์ด 123456789์ธ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑ. ์ฟ ํ‚ค๋Š” ํ‚ค์™€ ๊ฐ’์˜ ํ˜•ํƒœ๋กœ ์ƒ์„ฑํ•จ.
๐Ÿ‘‰ setMaxAge(60 * 60)์„ ํ†ตํ•ด ์ฟ ํ‚ค์˜ ์œ ํšจ ์‹œ๊ฐ„์„ 1์‹œ๊ฐ„์œผ๋กœ ์„ค์ •.
๐Ÿ‘‰ resp.addCookie(goodsCookie)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ฟ ํ‚ค๋ฅผ HTTP ์‘๋‹ต์— ์ถ”๊ฐ€.




7-2. ViewController

@WebServlet(value = "/goods/view1")
@Log4j2
public class ViewController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        Cookie[] cookies = req.getCookies();//๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด๋‚ด์ค€ ์ฟ ํ‚ค๋“ค์ด ์žˆ์Œ

        if(cookies == null) {
            log.info("no cookie"); //์ฒ˜์Œ๋ฐฉ๋ฌธํ•ด์„œ ์ฟ ํ‚ค๊ฐ€ ์—†๋‹ค๋ฉด
            return;
        }

        for (Cookie cookie : cookies) {
            log.info("cookie: " + cookie.getName());
            log.info("cookie Value: " + cookie.getValue());
            log.info("---------------------------------");
        } //๋…ธํŠธ๋ถ์œผ๋กœ ํ• ๋•Œ๋Š” 2๊ฐœ๊ฐ€ ๋‚˜์˜ค์ง€๋งŒ, ํœด๋Œ€ํฐ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด 1๊ฐœ๋งŒ ๋‚˜์˜จ๋‹ค.

    }
}

๐Ÿ‘‰ getCookies๋ฅผ ํ†ตํ•ด cookies๋ฅผ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ๋‹ค.
๐Ÿ‘‰ (makeController๋ฅผ ๋“ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ”๋กœ view๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค๋ฉด.) ๋งŒ์•ฝ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด no cookie๋กœ log๊ฐ€ ๋œฌ๋‹ค.
๐Ÿ‘‰ ํ•˜์ง€๋งŒ make๋ฅผ ํ•œ ์œ ํšจ๊ธฐ๊ฐ„ ํ•œ์‹œ๊ฐ„๋™์•ˆ์€ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋”๋ผ๋„ ์ด์ „์— ์ƒ์„ฑํ•œ ์ฟ ํ‚ค ๋•Œ๋ฌธ์— ์ฟ ํ‚ค์˜ value๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€