유돌이

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

'세션'에 해당되는 글 2

  1. 2009.02.09 개발자가 알아두면 좋은 ASP.NET 지식 (세션편)
  2. 2008.12.20 세션과 쿠기
2009. 2. 9. 21:40 C/C++/MFC
미 아시겠지만, 세션에는 ASP.NET에는 3가지의 세션 모드를 지원하고 있습니다. 
 
1) InPro방식 , 2) StateServer방식, 3) SQLServer방식  
  1. 세션 저장방식 
    1) 웹서버의 메모리에 저장된다. 
     
    2) 분리된 프로세스(aspnet_state.exe)의 메모리에 serialize된 형태로 저장된다. 분리된 서버에 저장이 가능하다. 
     
    3) serialize된 형태로 SQL서버에 저장된다. 
     
  2. 성능 
    1) 속도가 가장 빠르다. 세션저장소가 웹서버의 메모리이므로 저장량이 많아질 경우 웹서버 처리속도에 영향을 미칠 수 있다. 
     
    2) 기본형식의 데이타(string, integer등)인 경우 기준으로 15%의 속도저하가 있다고 알려짐.  
    그렇지만, 일반 object를 저장할 경우, serialize/deserialize과정을 거쳐야 하므로 성능은 더욱 저하될 수 있다. 
     
    3) 기본형식의 데이타인 경우 기준으로 25%의 속도저하가 있다고 알려짐. 
    stateServer방식과 마찬가지로, 일반 object를 저장할 경우, serialize/deserialize과정을 거쳐야 하므로 성능은 더욱 저하됨. 
     
  3. 문제점 
    1) aspnet_wp 프로세스가 재기동(recycle)되면 세션상태가 사라짐(SP2: 비정상적 recycle을 해결함).  
    어플리케이션을 다시 시작해도 세션사라짐.  
    이유는 어플리케이션의 메모리영역에 세션을 저장하기 때문에, 어플리케이션이 재시작하면 메모리영역을 다시 할당받기 때문이다. 
     
    어플리케이션을 재시작되는 되는 사항 
     
           가) config파일의 수정(web.config, machine.config, global.asax등) 
           나) \bin 디렉토리 밑의 파일 수정(즉 컴파일을 새로 하게되면 세션 사라지는 큰 문제점이 있음) 
     
    2) Inproc방식의 세션사라지는 문제를 해결함. WebFarm환경에서 특정서버에 세션을 저장하게 하는 것을 가능하게 함. 
    그렇지만, 세션서버의 장애발생시 모든 웹서버의 세션이 작동안하는 문제점이 있음. 
     
    3) Inproc방식의 세션사라지는 문제를 해결함. SQL서버가 재기동되어도 세션 사라지지 않음. 
    또한 SQL서버의 클러스터링을 이용하면, 특정 SQL서버의 장애시에도 서비스 가능함. 
     
  4. 유의사항 
    1) Web Garden mode에선 제대로 동작안함.(주: Web Garden이란 프로세서(CPU) 독립적으로 aspnet_wp.exe가 실행됨) 
    WebGarden을 사용하려면, StateServer나 SQLSERVER로 바꾸어야 함. 
    Session_End 이벤트는 Inproc 모드에서만 동작한다. 
     
    2) Web Farm방식에서는 모든 웹서버들은 같은 machineKey를 가져야 한다. 
    또한 저장되는 객체가 serializable하는지 확인해야 한다. 
    Web Farm방식에서 다른 서버로 세션이 전달되기 위해서는 어플리케이션의 경로가 같아야 한다. 
     
    3) 저장되는 객체가 serializable하는지 확인해야 한다. 
    Web Farm방식에서 다른 서버로 세션이 전달되기 위해서는 어플리케이션의 경로가 같아야 한다. 
     
  5. 자주 묻는 질문 
    1) ASP와 ASP.NET의 세션을 공유할 수 있는지요..? 
    - 불가능합니다. 
     
    2) 서로 다른 웹어플리케이션 사이에 세션을 공유할 수 있는지요.. 
    - 불가능합니다. 
     
    3) Inproc방식에서 왜 가끔 세션값이 사라지나요? 
    - 어플리케이션의 recycle때문입니다. SP2에서 Fix 되었습니다. 
     
    4) 어떤 종류의 객체가 세션에 저장될 수 있나? 
    - 세션저장 방식에 따라 달라집니다. 
     
    Inproc방식에서는 어떤 객체라도 저장할 수 있으나,  
    StateServer와 SQLServer방식에서는 serializable한 객체만 저장될 수 있습니다. 
    사용자가 직접 만드는 클래스인 경우 serializable속성을 추가함으로써 저장이 가능하나,  
    제공되는 클래스인 경우 Object명.GetType.IsSerializable() 로써 알아볼 수는 있으나,  
    변경은 불가능한 것 같습니다. (확실하진 않습니다). 
     
    5) Serializable은 어떻게 지정하나? 
    - C# 
    [Serializable]  
    public class MyClass  
    {  
           //class code  
    }  
     
    - VB.NET 
    <Serializable()> _  
    Public Class MyClass  
           'Class code  
    End Class 
posted by 유돌이
2008. 12. 20. 22:11 PHP/Java Script/html

* 쿠키와 세션이란 같은 사용자인지를 알아내는 방법 *

* 정보가 쿠키는 클라이언트, 세션은 서버에 저장됨 *

 

1.웹사이트에 로그인 후,
주소표시줄에 다음을 입력

javascript:alert(document.cookie)

2.cookie
2-1. 쿠키란?
같은 사용자인지를 알아내기 위해 클라이언트쪽에 저장되는 값.

2-2. Cookie사용법

setCookie(쿠키변수,변수값,시간,디렉토리);

** 쿠키변수 : $는 사용하지 않는다. 단, 저장된 쿠키값을 사용할 때는 $변수명과 같이 사용

** 변수값 : 쿠키 생성할 때는 값을 입력하고, 삭제시에는 ""와 같이 작성

** 만료시간 : 쿠키 변수가 쿠키값을 가지고 있는 유효 시간을 나탸낸다. "0"으로 설정하면 브라우저가 닫히면 쿠키값이 사라지고 기간을 주는 경우에는 "time()+3600"과 같은 형태로 설정한다.

** 디렉토리 : 아무값도 설정하지 않는 경우 서브디렉토리에만 쿠키가 적용되나 상위,하위의 모든 디렉토리에서 적용하기 위해서는 '/'로 설정

a.php
< ?
setcookie("userid","suhoi");
?>

b.php
< ?
echo $userid;
?>


< ?
global $mode;
if (!$mode){
echo " 여기는 cookie.php입니다. < br>";
echo "< form name=cookie method=get action=cookie.php>";
echo "            ";
echo "ID : < input type=text name=id size=10> < br>" ;
echo "Nickname : < input type=text name=nickname size=15> < br>";
echo "< input type=hidden name=mode value=write>< br>< br>";
echo "< input type=submit value='쿠키에 저장되었는지 볼까요'>< br>";
echo "< /form>";
}
if ($mode=="write"){
setcookie("ID",$id,0);
setcookie("Nickname",$nickname,time()+36600);
echo "ID : $ID < br>" ;
echo "Nickname : $Nickname < br>< br>";
echo "< a href='cookie.php?mode=view'>쿠키에 저장되었는지 볼까요?< /a>< br>";
}
if ($mode=="del"){
setcookie("ID","");
setcookie("Nickname","");
echo "ID : $ID < br>" ;
echo "Nickname : $Nickname < br>";
echo "여기에서는 ID에 설정된 값을 모두 삭제합니다.< br>< br>";
echo "< a href='cookie.php?mode=view'>쿠키값이 삭제되었는지 볼까요?< /a>< br>";
}
if ($mode=="view"){
echo " 현재 적용된 쿠키의 상태를 보여줍니다. < br>";
echo "ID : $ID < br>" ;
echo "Nickname : $Nickname < br>< br>";
echo "< a href='cookie.php?mode=del'>쿠키값을 삭제합니다.< /a>< br>< br>";
echo "< a href='cookie.php'>다시 쿠키처음으로 돌아갑니다.< /a>< br>";
}
?>

3. 세션 시작하기

◆ 세션이란 무엇인가?

세션도 역시 상태 유지(로그인유지) 를 위해 필요한 것임다.


◆ 샌님 근디 왜 세션을 써야 하나용 ?
아직도 감이 안올수도 있슴다. 왜 써야 할까요? 저번에도 말했듯이 이놈이 이놈인지 저놈이 저놈인지 구별하기
위해서 사용함다. 세션은 쿠키의 발전된 개념으로 서버에 저장이 됨다. 물론 사용자 하드에도 저장이 되나 서버
에 저장되어 있는 값이 우선임다.

쿠키 보다는 약간 보안이 좋아졌다고 하네용 ^^

◆ 어케 쓰는가 ?
세션을 사용할려면 반드시 session_start() 를 먼저 써주어야 함다. 이유 여하 불문 하고 맨먼저 session_start
() 를 사용하면 세션을 쓰겟다 이소리 임다.^^


◆세션 값을 봐볼까나 ?

se1.php
< ?
session_start();
$my_session="마이홈 쩜 ,네이버 쩜 컴 ,수호이";
session_register("my_session");
print "세션등록완료";
?>
-------------------------------------------
se2.php
< ?
session_start();
print "저장된 세션값은 :$my_session 이다 ";
?>

se1.php 와 se2.php 는 세션을 이해 하기 쉬운 예제 임다.
우선 브라우져 에서 se2.php 를 실행 해 보세요. 그러면 당연히 아무것도 안찍히죵 ^^
세션값을 정해 주지 않았으니까요 ^^

세션값을 정해 주는 놈이 session_register() 임다. 세션_등록()이죵 ^^ 쿠쿠

$my_session="마이홈 쩜,네이버 쩜 컴 ,수호이"; 나 마찬가지죵. 그러나 변수와는 달리 어디서나 불러도 값을
불 를 수 있슴다. ^^


◆ 좀 더 예가 필요하당.
온라인 폴 시스템을 예를 들어 보자. 한번 투표 할 경우 다음에는 투표를 하지 못해야 한다. 새로고침 을 열나
눌러서 올라가게 만들면 안되는 것이다. 온라인 폴의 중복 체크는 아주 간단하다.

poll.php

< ?
session_start();
if(!$c)
{
$c="vote";
session_register("c");
echo "투표하러가세";

}else{
echo " 당신은 투표 했는디...날 바보로 아남? ";
}
?>

poll.php 를 실행 해보세용 ^^
처음에 했을때와 2번째 했을때 를 비교 하세요^^


◆ 실수 체크
세션을 등록 할때 $ 는 들어가지 않는다. 반드시 주의 하길 바람다. ^^

$c="vote";
session_register("$c");

가 아니라
$c="vote";
session_register("c");
이며

그다음에 $c 로 값을 읽어 옴다 ^^


3-1. session_start() : 페이지의 맨 위에서 호출하여야 한다. session_register()를 바로 사용하는 경우 내부적으로 session_start()를 호출하기 때문에 큰이상은 없지만 호출하는 것이 좋다..

아니면 php.ini안의 session.auto_start옵션을 1또는on으로 수정해 두면 된다.


3-2. 예제
< ?
global $mode;

function ss_dispaly(){
global $ID, $Nickname;
echo "< br>< b> 현재 설정된 SESSION 변수를 확인합니다.< /b>< br>";
echo "< br> ID 등록여부: ";
echo session_is_registered('ID');
echo "< br>Nickname 등록여부: ";
echo session_is_registered('Nickname');
echo "< br>";
echo "< br> ID값: ";
echo $ID;
echo "< br> Nickname값: ";
echo $Nickname;
}

if (!$mode){

echo "< br>< hr wdith=80%>< br>여기는 session.php 시작입니다. < br>";
echo "ID와 닉네임을 입력하세요. < br>";
echo "< form name=session method=post action=session.php>";
echo "           ";
echo "ID : < input type=text name=ID size=10> < br>" ;
echo "Nickname : < input type=text name=Nickname size=15> < br>";
echo "< input type=hidden name=mode value=write>< br>< br>";
echo "< input type=submit value='세션에 저장되었는지 볼까요'>< br>";
echo "< /form>< br>< hr wdith=80%>";
}

if ($mode=="write"){
session_start();
session_register("ID");
session_register("Nickname");
ss_dispaly();
echo "< br>< br>< a href='session.php?mode=del'>session 데이터를 삭제해 볼까요?< /a>< br>";
}

if ($mode=="del"){
session_start();
session_unregister("ID");
session_unregister("Nickname");
session_destroy();
echo "여기에서는 세션에 설정된 값이 모두 삭제되었습니다.< br>< br>";
ss_dispaly();
echo "< br>< hr width=100%>< br>";
echo "< a href='session.php'>다시 처음으로 돌아가 볼까요?< /a>< br>";
}
?>

* 세션은 쿠키와 다르게 유지시간을 설정하지 않는다. *


** 세션의 장점 **
1. 서버에 저장되어 보안적인 측면이 강화
2. 웹페이지를 읽기만 하더라고 세션의 연결 유지시간이 자동으로 증가돼.일정시간동안 아무 작업을 하지 않을시 세션을 끊기가 유리

 

---------------------------------------------------------------------------------------

 

요약

1. 세션 / 쿠키

: 같은 사용자인지 구분

 

2. 쿠키 설정(삭제)

: setcookie("변수","값",시간,디렉토리)

  setcookie("변수","")

 

3. 세션

: session_start();

할당 : session_register(변수)

삭제 : sesstion_unregister(변수)



-------------------------------------------------------------------------------
sDZpgPEIa4m0tdZqmgJrvGO//b7vVKnZeY5tOA/LS90=
posted by 유돌이
prev 1 next