@GetMapping("/basic-objects") public String basicObjects(HttpSession session) { ... } 위 컨트롤러 작성하는 부분입니다. 관련된 html 파일은 basic-objects 인데, ${#session} 으로 세션을 꺼내고 ${session} 으로도 세션을 꺼내네요. 이게 가물가물한데 컨트롤러 메서드에서 파라미터로 호출하면 자동으로 모델에 넣어주기 때문에 thymeleaf 에서 ${session} 을 꺼낼 수 있는거죠?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 제가 이해한 바로는 request.getSesison 을 통해 얻는 HttpSession 은 SessionManager 와 비교하면 createSession 동작이 아니라 sessionStore 와 같은 개념의 저장소를 호출하는 것 같고, HttpSession 의 setAttribute 동작이 createSession 의 sessionStore.put 과 같은것이며 request.getSesison 를 통해 null 이 아닌 session 이 처음 만들어질 때, response 에 어떤 클라이언트의 sessionStore(HttpSession) 인지 구분하는 id 가 쿠키로 담기는 것 같은데 이렇게 이해하는게 맞을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 쿠키에 대해서 알게 되었지만 궁금한점이 있습니다. 구글에 검색하다 본 기억이 있는데 쿠키 & 세션을 REST 개발환경에서는 못쓴다고 본적이 있는거 같은데 스프링 부트로 rest형식으로 개발할 때는 쿠키 & 세션을 못쓰는게 맞나요? 만약, 못쓰는게 맞다면 그러면 로그인 유지나 광고 3일 동안 안보겠습니다 같은 쿠키를 사용해야 할 때는 어떤식으로 시켜줘야나요? 리액트와 협업하면 프론트에게 맡겨야 하나요?
선생님, 안녕하세요. 사실 이 질문이 여기에 해도 되는 질문인지 잘 모르겠지만 답변해주시면 감사하겠습니다. nest.js를 학습하기에 앞서 express 를 복습하고자 전에 개인적으로 만들었던 거를 한번 복습 후, 이번에 aws ec2에 배포까지 해보게 되었습니다. 로그인을 session으로 구현하였는데, 로컬에서는 클라이언트에 쿠키가 잘 전달 되었지만, ec2에 올리고 난 후 클라이언트에 쿠키가 전달되지 않아 도움을 청하고자 합니다. 우선 서버쪽 CORS 설정과 세션 설정은 이렇게 해주었습니다. app.use( cors({ origin: [ 'https://jh-client.ga' // 배포한 client url ], preflightContinue: true, credentials: true, }) ); app.use( session({ secret: 'jjj', proxy: true, store: new RedisStore({ client: redisClient, ttl: 3600 * 24 * 3, //3600초 = 1시간 // ttl: 10, }), saveUninitialized: true, resave: false, name: 'MySessionKey', cookie: { sameSite: 'none', secure: true, // httpOnly : true, // maxAge: 1000 * 60 * 60, // 1000밀리세컨드 : 1초 maxAge: 1000 * 60 * 60 * 5, }, }) ); 클라이언트와 server 모두 ACM을 통해 https 설정을 해주었고, 클라이언트에는 cloud front, 서버에는 elastic load balancer 도 적용해주었습니다. stack over flow나 다른 곳들을 찾아본 결과, sameSite = 'none', secure = true 설정을 해주면 대부분 된다고 하던데 (물론 클라이언트에서 axios 요청을 보낼때도 withCredentials : true 설정을 해주었습니다.) 저는 이것 외에도 추천하는 다양한 방법들을 시도해보았지만 잘 해결되지 않아 너무 답답한 마음에 질문 드렸습니다. 꼭 답변해주시면 감사하겠습니다 감사합니다~~
안녕하세요! 강좌를 바탕으로 블로그를 제작하는 중에, 방문자 수를 counting 하는 기능을 구현하는데 막혀 질문드립니다. front server에서 getServerSideProps에 있는 export const getServerSideProps = wrapper.getServerSideProps(async (context) => { const cookie = context.req ? context.req.headers.cookie : ''; axios.defaults.headers.Cookie = ''; if (context.req && cookie) { axios.defaults.headers.Cookie = cookie; } context.store.dispatch({ type: LOAD_MY_INFO_REQUEST, }) context.store.dispatch({ type: LOAD_POSTS_REQUEST, }); context.store.dispatch(END); await context.store.sagaTask.toPromise(); }); LOAD_MY_INFO_REQUEST와 LOAD_POSTS_REQUEST를 이용해 back server에 요청을 날리면 back server에서는 app.js의 최상단에 존재하는 let count = 0; app.use((req,res,next) => { var date = new Date(); var today=date.getYear()+" "+date.getMonth()+" "+date.getDate(); console.log("lastvisit : " + req.session.lastVisit); if(req.session.lastVisit != today){ req.session.lastVisit = today; count++; } next(); }); 다음 함수를 이용해 방문자 수를 count할려고합니다! 문제는 front에서 먼저, LOAD_MY_INFO_REQUEST로 요청을 보내, session과 함께 응답을 받고 다시 LOAD_POSTS_REQUEST요청을 하면, 요청에는 첫번째 요청의 응답으로 넣어주었던 session이 존재하지 않는다는 점입니다. 몇일동안 잡고 있어도 도저히 해결책을 모르겠어 질문드립니다.
클라이언트가 접속했을때 Listener에서 session.Start(args.AcceptSocket); 을 통해 Session에 Socket을 주입하는데, new 하는곳이 없는데 어떻게 Socket을 자동으로 생성해서 AcceptSocket에 할당해서 뿌려주는지 알고싶습니다. Listen 함수가 호출된 소켓만이 AcceptAsync에서 응답이 왔을때 초기화 해주는 것일까요? 그리고 args.AcceptSocket = null; 로 밀어주는 이유가 있을까요? 다른건 다 초기화 되는데 이것만 초기화되지 않는 이유가 따로 있을까요?
1. 제가 지금 까지 강의를 듣고 이해한 것 으로는 세션은 서버 에서 session(메모리) 형태로 로그인 정보를 저장해두고 쿠키 (브라우저에서) session ID 를 저장해 놓으면 새로고침 할 때 마다 session ID 로 session 을 조회하여 로그인 시켜주는 것 으로 알고 있는데 정확히 이것이 맞나요?? 잘 이해가 안되서 요.. ㅠㅠ 강의 도중 JWT 가 알맞는 프로젝트가 있고 session 이 알맞는 프로젝트가 있다고 하셨는데.. 제가 (초급자 입장에서) 봤을 때 는 JWT 가 무조건 이득일 것 같습니다.. session 은 redis(추 가비용 발생!) 도 있고 또 load balancer 서버도 있어야 하는 것으로 알고있는데..(자세히는 모르지만 주워들었습니다..) 코 딩도 비교적 양이 많을 것 같아요. 2. JWT가 알맞는 프로젝트와 Session 이 알맞는 프로젝트를 예시로 들어주실 수 있으신가요..? 3. JWT 가 네트워크 용량이 늘어 난 다는 것 외에 단점이 있을까요?
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
안녕하세요? 좋은 강의 제공 주셔셔 감사합니다. 코드를 따라 가면서 궁금한 사항이 있어 글 남기게 되었습니다. 서버와 클라가 서로 연결 될 때 ClientSession.cs의 MyPlayer의 정보가 MyPlayer.Info.PosInfo.State = CreatureState.Idle; MyPlayer.Info.PosInfo.MoveDir = MoveDir.None; 으로 정의 되는걸로 보입니다. (코드 하단) public override void OnConnected(EndPoint endPoint) { Console.WriteLine($"OnConnected : {endPoint}"); MyPlayer = PlayerManager.Instance.Add(); { MyPlayer.Info.Name = $"Player_{MyPlayer.Info.PlayerId}"; MyPlayer.Info.PosInfo.State = CreatureState.Idle; MyPlayer.Info.PosInfo.MoveDir = MoveDir.None; MyPlayer.Info.PosInfo.PosX = 0; MyPlayer.Info.PosInfo.PosY = 0; MyPlayer.Session = this; } RoomManager.Instance.Find(1).EnterGame(MyPlayer); } 궁금한 사항은 하기 부분 입니다. 연결 된 이후에 MyPlayer가 어디서 변경 되기에 public static void C_MoveHandler(PacketSession session, IMessage packet) 에서 session 정보를 받아다가 쓸 수 있는지 알 수 있을까요 ?? ㅜㅜ 특히 C_MoveHandler 코드 중에서 PlayerInfo info = clientSession.MyPlayer.Info; 부분이 이해가 안되는데, 현재 MyPlayer가 정보 중 Move Dir 은 None으로 계속 유지되고 있는게 아닌가요 ? 어디서 MyPlayer정보가 업데이트 되는지 알 수 있을까요 ? ㅜ //일단 서버에서 좌표 이동 PlayerInfo info = clientSession.MyPlayer.Info; info.PosInfo = movePacket.PosInfo; //다른 플레이어한테도 알려준다. S_Move resMovePacket = new S_Move(); resMovePacket.PlayerId = clientSession.MyPlayer.Info.PlayerId; resMovePacket.PosInfo = movePacket.PosInfo; clientSession.MyPlayer.Room.Broadcast(resMovePacket);