CI 묻고 답하기

제목 세션이 끊어져야 되는데, 없어지지가 않네요.
글쓴이 이종옥 작성시각 2010/01/25 17:35:40
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 33583   RSS
CI에서 일단 세션을 좀 다르게 쓴다고는 알고 있는데,

보통 세션쓰듯이 쓸려면 어떻게 해야 되나요?
즉, 웹페이지를 닫으면 세션이 끊겨야 되고,
웹페이지를 새로 열면, 다른 아이디로 로그인이 가능하고,
세션이 별도로 생겨서,  한PC에서 여러 아이디로 사이트를 사용할 수 있게요.

CI초보라서 하루종일 해맸습니다.
뭔가 설정하는게 있을 듯 싶은데,

CI에서 말하는 세션은 일반적으로 알고있는 세션이 아니잖아요.
차라리 세션이라는 명칭을 CI에서  사용하지 않았으면, 이렇게 해매지는 않았을 텐데.

CIPersistence라든가, CICookie... 이런 명칭 써주면, 헛갈리지 않고 좋을 텐데요...ㅋㅋ

고수님들 부탁드립니다.
 다음글 서버감시... (3)
 이전글 [초보]윈도apm 세션에 관하여 (5)

댓글

케이든 / 2010/01/25 17:54:21 / 추천 0
libraries/MY_Session.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* MY_Session Class
*
* Extends the core CI_Session giving it the ability to create
* session cookies that expire when the browser closes
*/
class MY_Session extends CI_Session {
    
    //destroy session when window is closed.
    var $close = TRUE;

    /**
     * Overwrites the core CI_Session _set_cookie function
     */
    function _set_cookie($cookie_data = NULL)
    {
        if (is_null($cookie_data))
        {
            $cookie_data = $this->userdata;
        }

        // Serialize the userdata for the cookie
        $cookie_data = $this->_serialize($cookie_data);

        if ($this->sess_encrypt_cookie == TRUE)
        {
            $cookie_data = $this->CI->encrypt->encode($cookie_data);
        }
        else
        {
            // if encryption is not used, we provide an md5 hash to prevent userside tampering
            $cookie_data = $cookie_data.md5($cookie_data.$this->encryption_key);
        }

        // Set the cookie
        setcookie(
                    $this->sess_cookie_name,
                    $cookie_data,
                    // determine if session cookie expires on browser close
                    $this->close ? 0 : $this->sess_expiration + time(),
                    $this->cookie_path,
                    $this->cookie_domain,
                    0
                );
    }
    
    
    /**
     * New function to toggle between a session cookie that
     * expires on browser close and one that doesn't
     */
    function expire_cookie($bool)
    {
        $this->close = $bool;
        $this->sess_time_to_update = -1;
        $this->sess_update();
    }
    
} 

사월 / 2010/01/26 05:59:55 / 추천 0
CI의 세션 라이브러리는 PHP 의 Session을 쓰지 않고 Cookie 를 사용하는데
개인적으로는 맘에 들지않아서 PHP 세션 쓰는 라이브러리로 대체해서 사용중입니다.
http://codeigniter.com/wiki/Native_session/

kirrie / 2010/01/26 09:17:35 / 추천 0
일단 CI에는 케이든님이 첨부한 확장 라이브러리를 사용해야 할 필요가 있습니다. 웹브라우져를 닫으면 바로 쿠키가 만료되도록 작성해야 하는데, 매번 버전업 할때마다 이 부분이 반영이 안되더군요.

두번째로는 config.php파일에 보시면 세션 매칭을 다양한 방법으로 하도록 되어 있는데, 예를 들어 웹브라우져의 agent나 ip가 같으면 동일세션으로 판단한다던가 하는 옵션이 그것입니다. 일반적인 경우라면 이런걸 쓸 일이 없으므로 모두 false로 놓고 사용하시면 됩니다.

사월님 말씀처럼 저도 뭔가 맘에 안드는게 있는데, 다른 내장 라이브러리가 세션 라이브러리를 참조하는 일이 좀 있어서 저는 그냥 CI 세션을 사용하고 있습니다.