DB 세션 핸들링
다들 아시는 내용이겠지만,
혹시 모르는분들을 위하여 공유합니다.
1. 환경
- mysql 또는 mariadb
- php 5.xx 이상
2. 구현
mysql에서 테이블을 생성합니다.
[code]
CREATE TABLE `Session` (
`Session_Id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`Session_Expires` datetime NOT NULL,
`Session_Data` text COLLATE utf8_unicode_ci,
PRIMARY KEY (`Session_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
[/code]
inc.session.php 파일을 만들어 줍니다.
[code]
<?php
//inc.session.php
class SysSession implements SessionHandlerInterface
{
private $link;
public function open($savePath, $sessionName)
{
$link = mysqli_connect("server","user","pwd","mydatabase"); // 자신의 db정보를 기입합니다.
if($link){
$this->link = $link;
return true;
}else{
return false;
}
}
public function close()
{
mysqli_close($this->link);
return true;
}
public function read($id)
{
$result = mysqli_query($this->link,"SELECT Session_Data FROM Session WHERE Session_Id = '".$id."' AND Session_Expires > '".date('Y-m-d H:i:s')."'");
if($row = mysqli_fetch_assoc($result)){
return $row['Session_Data'];
}else{
return "";
}
}
public function write($id, $data)
{
$DateTime = date('Y-m-d H:i:s');
$NewDateTime = date('Y-m-d H:i:s',strtotime($DateTime.' + 1 hour'));
$result = mysqli_query($this->link,"REPLACE INTO Session SET Session_Id = '".$id."', Session_Expires = '".$NewDateTime."', Session_Data = '".$data."'");
if($result){
return true;
}else{
return false;
}
}
public function destroy($id)
{
$result = mysqli_query($this->link,"DELETE FROM Session WHERE Session_Id ='".$id."'");
if($result){
return true;
}else{
return false;
}
}
public function gc($maxlifetime)
{
$result = mysqli_query($this->link,"DELETE FROM Session WHERE ((UNIX_TIMESTAMP(Session_Expires) + ".$maxlifetime.") < ".$maxlifetime.")");
if($result){
return true;
}else{
return false;
}
}
}
$handler = new SysSession();
session_set_save_handler($handler, true);
?>
[/code]
db 세션핸들링이 잘되는지 세션 스타트 테스트를 해봅니다.
db에 잘들어가져 있으면 정상적으로 핸들링이 되는겁니다.
이코드를 잘 이해를 하셨다면 redis나 memcached같은 메모리db에서도 활용이 가능합니다.
[code]
<?php
//page 1
require_once('inc.session.php');
session_start();
$_SESSION['var1'] = "My Portuguese text: SOU Gaucho!";
?>
[/code]
댓글 2개
감사합니다.
게시판 목록
개발자팁
질문은 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 5096 | PHP | 3년 전 | 1508 | ||
| 5095 | JavaScript | 3년 전 | 2137 | ||
| 5094 | JavaScript | 3년 전 | 2057 | ||
| 5093 | 기타 | 3년 전 | 1422 | ||
| 5092 | JavaScript | 3년 전 | 1967 | ||
| 5091 | 기타 |
|
3년 전 | 1329 | |
| 5090 | 기타 |
|
3년 전 | 2261 | |
| 5089 | 웹서버 |
|
3년 전 | 3344 | |
| 5088 | JavaScript | 3년 전 | 2070 | ||
| 5087 | 기타 | 3년 전 | 1668 | ||
| 5086 | 웹서버 |
|
3년 전 | 1715 | |
| 5085 | node.js | 3년 전 | 1660 | ||
| 5084 | JavaScript |
DogFoot개발
|
3년 전 | 1460 | |
| 5083 | 웹서버 |
DogFoot개발
|
3년 전 | 2996 | |
| 5082 | JavaScript |
DogFoot개발
|
3년 전 | 4034 | |
| 5081 | JavaScript |
DogFoot개발
|
3년 전 | 2105 | |
| 5080 | JavaScript |
DogFoot개발
|
3년 전 | 2450 | |
| 5079 | 기타 |
DogFoot개발
|
3년 전 | 2502 | |
| 5078 | OS | 3년 전 | 1659 | ||
| 5077 | 웹서버 |
DogFoot개발
|
3년 전 | 1734 | |
| 5076 | 기타 |
DogFoot개발
|
4년 전 | 1539 | |
| 5075 | 기타 |
DogFoot개발
|
4년 전 | 1684 | |
| 5074 | 기타 | 4년 전 | 2298 | ||
| 5073 | 기타 | 4년 전 | 2569 | ||
| 5072 | 웹서버 |
|
4년 전 | 2246 | |
| 5071 | 웹서버 | 4년 전 | 3244 | ||
| 5070 | PHP | 4년 전 | 3201 | ||
| 5069 | 웹서버 | 4년 전 | 2442 | ||
| 5068 | 기타 |
|
4년 전 | 3021 | |
| 5067 | 기타 |
DogFoot개발
|
4년 전 | 2692 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기