CI 묻고 답하기

제목 다른 cms 툴과 세션공유
글쓴이 emc 작성시각 2009/10/20 20:38:35
댓글 : 16 추천 : 0 스크랩 : 0 조회수 : 32032   RSS
안녕하세요.

다른 cms툴과 세션을 공유하고 싶은데요.

cms 밑에 ci 폴더를 놓고, 거기에서 컨트롤 할려고 합니다.

cms/ci/

$this->session->userdata('test')로 취득이 안되는군요.

ps. 디비세션은 사용하지 않습니다.

도움좀 구합니다.
 다음글 view의 frameset 사용 (3)
 이전글 로그인 들은 다들 어떻게 만들고 계시나요? (7)

댓글

ci세상 / 2009/10/21 01:33:59 / 추천 0
<몇가지 점검을 해본다면요^^>

1. 프로파일로 확장해서 세션, 디비상태 점검
http://codeigniter-kr.org/source/view/204/page/1/q/

2. Flashdata 사용유무 체크
http://codeigniter-kr.org/user_guide/libraries/sessions.html

3. cofing.php
$config['cookie_path']  = "/";
ci세상 / 2009/10/21 09:15:07 / 추천 0

궁금증?

cms 설치하고 cms 폴더밑에 ci를 새로 설치하셨나요? 즉, ci가 2개인거죠?

emc / 2009/10/21 09:39:12 / 추천 0
오픈소스로 된 (생php로 된) 그룹웨어를 사용하고 있구요.
커스터마이징이 필요해서 ci를 이용해서 커스터마이징 할려고 합니다.

전혀다른 시스템인데요.
같이 세션 공유를 할수 있는지에 .... 궁금하네요.

ci는 하나만 설치되어있습니다.
$config['cookie_path']  = "/"; 로 되어있구요.
ci세상 / 2009/10/21 13:32:59 / 추천 0
아래에 제가 사용한 방법을 올려보았습니다.^^

http://codeigniter-kr.org/source/view/275/page/1
emc / 2009/10/22 08:15:13 / 추천 0
cms 에서는 다음과 같이 ..
로그인 후에 .... 세션을 저장합니다.

            session_regenerate_id();
            $_SESSION['timestamp'] = time();
            $_SESSION['accesstime'] = $_SESSION['timestamp'];
            $_SESSION['authorized'] = md5(__FILE__.$_SESSION['timestamp']);
            $_SESSION['userid'] = $data['userid'];
            $_SESSION['realname'] = $data['realname'];
            $_SESSION['group'] = $data['user_group'];
            $_SESSION['authority'] = $data['authority'];

왜 안되는지 이해가 안가네요.

http://l-groupware.com/ 여기에서 다운받은 프로그램입니다.
다운로드는 여기에서 ..http://l-groupware.com/download/
ci세상 / 2009/10/22 10:39:23 / 추천 0
해당 프로그램 세션 처리 부분이 보안상 때문인지 어렵게 되어 있는것을 좀 쉽게 처리했습니다.^^

1. Authority부분에
session_name(APP_TYPE.'sid'); 제거

2. authorize 부분에
세션값만 있으면 true 처리

3. 세션생성시
session_regenerate_id 대신에 session_register 사용


<?php
/*
 * Copyright(c) 2009 limitlink,Inc. All Rights Reserved.
 * http://limitlink.jp/
 * 文字コード UTF-8
 */

class Authority {
	
	function Authority() {
		session_start();
	}

	function check() {
	
		$authorized = $this->authorize();
		if ($authorized !== true) {
			if (basename($_SERVER['SCRIPT_NAME']) != 'login.php') {
				$_SESSION['referer'] = $_SERVER['REQUEST_URI'];
				if (!file_exists('login.php')) {
					$root = '../';
				}
				header('Location:'.$root.'login.php');
				exit();
			}
		}

	}

	function authorize() {
	
		$authorized = false;
		if (isset($_SESSION['authorized'])) {
			if ($_SESSION['authorized']) {
				$authorized = true;
			}
		}
		return true;

	}

	function login() {
	
		$authorized = false;
		$error = array();
		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
			if (strlen($_POST['userid']) > 0) {
				if (preg_match('/^[-_\.a-zA-Z0-9]+$/', $_POST['userid'])) {
					$userid = trim($_POST['userid']);
				} else {
					$error[] = 'ユーザー名は半角英数字で入力してください。';
				}
				if (preg_match('/^[a-zA-Z0-9]*$/', $_POST['password'])) {
					$password = md5(trim($_POST['password']));
				} else {
					$error[] = 'パスワードは半角英数字で入力してください。';
				}
				if ($userid != '' && count($error) <= 0) {
					$connection = new Connection;
					$query = sprintf("SELECT id,userid,password,realname,user_group,authority FROM %suser WHERE userid = '%s'", DB_PREFIX, $connection->quote($userid));
					$data = $connection->fetchOne($query);
					$connection->close();
					if (count($data) > 0 && $data['userid'] === $userid && $data['password'] === $password) {
						$authorized = true;
					} else {
						$error[] = 'ユーザー名もしくはパスワードが<br />異なります。';
					}
				}
			} else {
				$error[] = 'ユーザー名を入力してください。';
			}
		} elseif (isset($_SESSION['status'])) {
			if ($_SESSION['status'] == 'idle') {
				$error[] = '自動的にログアウトしました。<br />ログインしなおしてください。';
			} elseif ($_SESSION['status'] == 'expire') {
				$error[] = 'ログインの有効期限が切れました。<br />ログインしなおしてください。';
			}
			session_unregister('status');
		}
		if ($authorized === true && count($error) <= 0) {
			session_register();
			$_SESSION['timestamp'] = time();
			$_SESSION['accesstime'] = $_SESSION['timestamp'];
			$_SESSION['authorized'] = md5(__FILE__.$_SESSION['timestamp']);
			$_SESSION['userid'] = $data['userid'];
			$_SESSION['realname'] = $data['realname'];
			$_SESSION['group'] = $data['user_group'];
			$_SESSION['authority'] = $data['authority'];
			if (isset($_SESSION['referer'])) {
				header('Location: '.$_SESSION['referer']);
				session_unregister('referer');
			} else {
				header('Location: index.php');
			}
			exit();
		} else {
			return $error;
		}

	}

	function logout() {

		$this->sessionDestroy();
		if (!file_exists('login.php')) {
			$root = '../';
		}
		header('Location:'.$root.'login.php');
		exit();

	}

	function sessionDestroy() {
	
		$_SESSION = array();
		if (isset($_COOKIE[session_name()])) {
			setcookie(session_name(), '', time() - 42000, '/');
		}
		session_destroy();

	}

}

?>

변종원(웅파) / 2009/10/22 12:16:30 / 추천 0
흠.. 나두 참고 좀. ㅋㅋ
emc / 2009/10/22 13:39:55 / 추천 0
회사에서 좀 커스터마이징 해서 써야 할것 같아서 손좀 보고 있습니다.

emc / 2009/10/23 08:27:38 / 추천 0
세션수정후에... 로그인 하지 않아도 페이지에 들어와 버리네요.
새션 부분을 좀 봐야겠네요.
ci세상 / 2009/10/23 09:07:20 / 추천 0
세션 유지시간 때문에 창을 닫고 열어도 계속 열려지는것 같습니다.^^

기존 소스에는 보니깐 시간체크를 넣어서 좀 빨리 끊어지게 해두었더라구요

authorize 이부분을 적절히 조절하거나 ~~ 창을 닫았을때 세션이 끊어지게 처리하면 좋을것 같습니다.^^
emc / 2009/10/23 11:35:04 / 추천 0
authorize 펑션이 항상 true 가 리턴되고 있었네요.
아래와 같이 리턴시키면 잘 되는것 같습니다.
return $authorized;
ci세상 / 2009/10/23 11:51:50 / 추천 0
아~~ 제 실수이네요~~ 테스트한다고 true로 고정해 두었습니다. ^^
emc / 2009/10/23 16:39:31 / 추천 0
ci로 접근은 가능한데요.
다른 컨트롤러로 이동이 안되네요.
test 컨트롤러를 만들어서 했는데..

htdocs 루트가 표시가 되는군요.
혹시 뭔가 설정이 안맞는것일까요
ci세상 / 2009/10/23 17:25:42 / 추천 0
cofig.php에서 다음 base_url을 수정해 보세요

$config['base_url'] = "http://example.com/";

c:/apmsetup/htdocs/crm/ci 라면

http://127.0.0.1/crm/ci/

까지 작성해 줘야 할것 같습니다.

emc / 2009/10/23 18:37:44 / 추천 0
그렇게 했는데, 안되더라구요
혹시 되나요? 저만 안되나.. ^^;