cookie 생성

Web 궁금하니? 2008. 9. 26. 17:32

자바스크립트 로그인폼 아이디저장 기능에 대한 질문입니다.

lsh00315 2007.07.09 17:21

답변 1| 조회 1,975

만들고 있는 쇼핑몰에 아이디저장기능을 추가시키려고 네이버를 돌아다니는데 아래 소스를 가장 많이 쓰는거같아 시도해봤는데 안되더군요... 원본 소스는

=========================================================

<html>
<head>
<script language="javascript">
function setCookie (name, value, expires) {
  document.cookie = name + "=" + escape (value) +
    "; path=/; expires=" + expires.toGMTString();
}

function getCookie(Name) {
  var search = Name + "="
  if (document.cookie.length > 0) { // 쿠키가 설정되어 있다면
    offset = document.cookie.indexOf(search)
    if (offset != -1) { // 쿠키가 존재하면
      offset += search.length
      // set index of beginning of value
      end = document.cookie.indexOf(";", offset)
      // 쿠키 값의 마지막 위치 인덱스 번호 설정
      if (end == -1)
        end = document.cookie.length
      return unescape(document.cookie.substring(offset, end))
    }
  }
  return "";
}
function saveid(form) {
  var expdate = new Date();
  // 기본적으로 30일동안 기억하게 함. 일수를 조절하려면 * 30에서 숫자를 조절하면 됨
  if (form.checksaveid.checked)
    expdate.setTime(expdate.getTime() + 1000 * 3600 * 24 * 30); // 30일
  else
    expdate.setTime(expdate.getTime() - 1); // 쿠키 삭제조건
  setCookie("saveid", form.id.value, expdate);
}
function getid(form) {
  form.checksaveid.checked = ((form.id.value = getCookie("saveid")) != "");
}

//맨 위에서부터 여기까지 main페이지에 붙여넣었습니다
</script>
</head>
<body onLoad="getid(document.mainform)">
<form name=mainform>
아이디 <input type=text name=id>
암호 <input type=password name=pw>
<input type=checkbox name=checksaveid onClick="saveid(this.form)">아이디 기억
</form>
</body>
</html>

=======================================================

 

이 색으로 바꾼것이 제가 복사하여 직접 사용한 소스부분입니다.

 

인덱스 파일이 있고 여기에 header/main/bottom 등을 불러오게 되있습니다.

 

로그인폼이 main 에 있어서 위 소스중 헤드 안에 들어가는 소스를 main 자바스크립트 안에 넣었습니다.(본문소스중 파란글씨로 적어놓았습니다)

 

그리고 나머지 소스들도 마찬가지로 main에 넣었습니다 그 소스입니다.

 

===============실제 적용한 소스 내용==================

<td width="119" height="24" onLoad="getid(document.login_id)">
                                                             <form name="login_id">
                                                             <input type="text" name="login_id" maxlength="15" size="17" class="text" style="width:110px" tabindex="1" style="background-image:url('<?=$g_skin_link?>/image/id_log_bg1.gif'); border-width:1; border-color:#a9a9a9; border-style:solid; width:120px; height:18px;" tabindex="3" autocomplete="off" onFocus="this.style.background='#ffffff'" onBlur="this.style.background='#ffffff'">
               </td>
                                                         <td width="233" height="48" rowspan="2">&nbsp;<input type="image" src="<?=$g_skin_link?>/image/loginleft_002.gif" width="49" height="42" border="0" onfocus="blur()" name="I1" ></td>
                                                     </tr>
                                                     <tr>
                                                         <td width="119" height="24">
                                                             <input type="password" name="login_pass" maxlength="15" size="17" class="text" style="width:110px" autocomplete="off" tabindex="2" style="background-image:url('<?=$g_skin_link?>/image/pw_log_bg1.gif'); border-width:1; border-color:#a9a9a9; border-style:solid; width:120px; height:18px;" autocomplete="off" tabindex="4" onFocus="this.style.background='#ffffff'" onBlur="this.style.background='#ffffff'">
               </td>
                                                     </tr>
                                                     <tr>
                                                          <td width="385" height="5" colspan="3"></td>
                                                     </tr>
                                                     <tr>
                   <td width="13" height="27"> </td>
                                                          <td width="353" height="27" colspan="2">
                                                          <input type=checkbox name=checksaveid onClick="saveid(this.form)">

==================================================================

정리해드리자면

 

main의 <script language=JavaScript> 안에

 

위 원본 소스 상단에 위치한 가장 긴 부분을 넣었고.

 

나머지는 로그인 폼 안에 "실제 적용한 소스 내용" 안에 오렌지색으로 바꾼 소스가

 

실제로 추가한 소스입니다.

 

근데 이상하게 정상 적용되지 않는군요...뭔가 잘못한건지..초짜라...

 

자세하게 설명 부탁드립니다.

 

 

 

 

추가된 질문
2007.07.10 22:27 추가
// 저장할 변수명, 저장할변수, 일자 (1:1일, 2:2일, 365:일년)
function setCookie (name, value, expiredays)

일자는 알겠는데 저장할변수명과 저장할변수에는 뭐라고 써 넣어야 하는건가요?

그리고 onload='javascript:getValue();' 이것은 꼭 body에 넣어야 하는건가요? 로그인폼은 main페이지이고

body가 있는 페이지는 header입니다. 상관 없나요?



신고

의견 쓰기

답변하시면 내공 10점을, 답변이 채택되면 내공 75점(채택25+추가50)을 드립니다. >나도 답변하기

질문자 선택

re: 자바스크립트 로그인폼 아이디저장 기능에 대한 질문입니다.

sjisbmoc

답변채택률 76.5%

2007.07.11 10:38

<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
<script>

// 저장할 변수명, 저장할변수, 일자  (1:1일, 2:2일, 365:일년)

function setCookie (name, value, expiredays)
{
 var todayDate = new Date();
 todayDate.setDate( todayDate.getDate() + expiredays );
 document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";";
}

function getCookie(name)
{
 var Found = false;
 var start, end;
 var i = 0;

 while (i <= document.cookie.length)
 {
  start = i;
  end = start + name.length;
  if (document.cookie.substring(start, end) == name)
  {
   Found = true;
   break;
  }
  i++;
 }

 if (Found == true)
 {
  start = end + 1;
  end = document.cookie.indexOf(';', start);
  if (end < start) end = document.cookie.length;
  return document.cookie.substring(start, end);
 }
 return '';
}

function setValue()
{
 var fm = document.form;
 setCookie ('user_id', fm.user_id.value, 1);
}

function getValue()
{
 var fm = document.form;
 fm.user_id.value = getCookie('user_id');
}

</script>

 </HEAD>
 <!-- body load 이후 쿠키에 저장된 값을 가져와 ID 값을 적용한다. -->
 <BODY onload='javascript:getValue();'>
  <form name='form'>

   <table>
    <tr>
     <td>
      <input type='text' name='user_id' style='width:100;' maxlength='10'>
      <!-- user_id 값을 쿠키에 저장한다. -->
      <input type='button' name='btn' value='setCookie' onclick='javascript:setValue();'>
     </td>
    </tr>
   </table>

  </form>
 </BODY>
</HTML>


 반듯이 onload 부분에 넣을 필요는 없습니다. 'user_id'  객체가 생성된 후 실행하기

위해서 해당 함수에 넣었을 뿐 특별한 이유는 없습니다.

onload 에 넣지 않을 경우는 user_id 객체가 선언된 이후에 호출 되도록 해야 합니다.

저장할 변수명과 가저올 변수명은

user_id 를 저장할때 쿠키에 저장할 이름을 정해 놓아야 가져올때도 가져 올 수 있기

때문입니다.

학교에서 한반의 학생들에게 번호를 부여하고 번호대로 호출 하듯이

집어넣을때 이름을 붙여넣으면 가져올때 똑같은 이름을 호명해서 쿠키에서

불러올 수 있기때문입니다.

부여하는 이름은 특별히 정해진것은 아니며 쿠키를 제작하는 사람의 기호에 맞춰서

집어넣으면 됩니다. 쿠키에 저장된 변수를 불러올때는 이때 이용한 이름을 이용하여

불러오면 되기때문에 불러올때와 집어넣을때 명칭은 동일하게 됩니다.

의견 쓰기

AND