Session 클래스 수정.
- Session클래스 내에서 global setter, getter 재정의 - Session클래스에서 static 함수로 getUserID, getUserGrade 재정의 - 내부 서버에서 getUserID, getUserGrade를 쓰던 것 Session 클래스로 통일 - SESSION.php가 requireLogin 기능을 수행하던것을 Session의 static 함수로 통합
This commit is contained in:
+100
-30
@@ -1,10 +1,45 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
require(__dir__.'/../vendor/autoload.php');
|
||||
|
||||
|
||||
if(!defined('ROOT')){
|
||||
define('ROOT', '..');
|
||||
}
|
||||
class Session {
|
||||
|
||||
const PROTECTED_NAMES = [
|
||||
'ip'=>true,
|
||||
'time'=>true,
|
||||
'userID'=>true,
|
||||
'userName'=>true,
|
||||
'userGrade'=>true,
|
||||
'writeClosed'=>true
|
||||
];
|
||||
|
||||
private $writeClosed = false;
|
||||
|
||||
/**
|
||||
* @return \sammo\Session
|
||||
*/
|
||||
public static function Instance(){
|
||||
static $inst = null;
|
||||
if($inst === null){
|
||||
$inst = new Session();
|
||||
}
|
||||
return $inst;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \sammo\Session
|
||||
*/
|
||||
public static function requireLogin(string $path = ROOT){
|
||||
$session = Session::Instance();
|
||||
if(!$session->isLoggedIn()){
|
||||
header('Location:'.$path);
|
||||
die();
|
||||
}
|
||||
return $session;
|
||||
}
|
||||
|
||||
public function __construct() {
|
||||
//session_cache_limiter('nocache, must_revalidate');
|
||||
|
||||
@@ -21,52 +56,91 @@ class Session {
|
||||
}
|
||||
}
|
||||
|
||||
public function writeClose(){
|
||||
session_write_close();
|
||||
/**
|
||||
* @return \sammo\Session
|
||||
*/
|
||||
public function setReadOnly(){
|
||||
if(!$this->writeClosed){
|
||||
session_write_close();
|
||||
$this->writeClosed = true;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function __set(string $name, mixed $value){
|
||||
if(key_exists($key, self::PROTECED_NAMES)){
|
||||
trigger_error("{$name}은 외부에서 쓰기 금지된 Session 변수입니다.", E_USER_NOTICE);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->set($name, $value);
|
||||
}
|
||||
|
||||
private function set(string $name, mixed $value){
|
||||
if($value === null){
|
||||
unset($_SESSION[$name]);
|
||||
}
|
||||
else{
|
||||
$_SESSION[$name] = $value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function __get(string $name){
|
||||
return $this->get($name);
|
||||
}
|
||||
|
||||
private function get(string $name){
|
||||
return util::array_get($_SESSION[$name]);
|
||||
}
|
||||
|
||||
public function set($key, $val) {
|
||||
$_SESSION[$key] = $val;
|
||||
}
|
||||
|
||||
public function get($key) {
|
||||
return util::array_get($_SESSION[$key]);
|
||||
}
|
||||
|
||||
public function login($noMember, $idMember, $grade) {
|
||||
$_SESSION['noMember'] = $noMember;
|
||||
$_SESSION['p_id'] = $idMember;
|
||||
$_SESSION['ip'] = util::get_client_ip(true);
|
||||
$_SESSION['time'] = time();
|
||||
$_SESSION['userGrade'] = $grade;
|
||||
public function login(int $userID, string $userName, int $grade) {
|
||||
$this->set('userID', $userID);
|
||||
$this->set('userName', $userName);
|
||||
$this->set('ip', util::get_client_ip(true));
|
||||
$this->set('time', time());
|
||||
$this->set('userGrade', $grade);
|
||||
}
|
||||
|
||||
public function logout() {
|
||||
unset($_SESSION['noMember']);
|
||||
unset($_SESSION['p_id']);
|
||||
unset($_SESSION['userGrade']);
|
||||
$this->set('userID', null);
|
||||
$this->set('userName', null);
|
||||
$this->set('userGrade', null);
|
||||
$this->set('time', time());
|
||||
}
|
||||
|
||||
public function getGrade() {
|
||||
return $_SESSION['userGrade'];
|
||||
/**
|
||||
* 로그인 유저의 전역 grade를 받아옴
|
||||
* @return int|null
|
||||
*/
|
||||
public static function getUserGrade(bool $requireLogin = false, string $exitPath = ROOT){
|
||||
if($requireLogin){
|
||||
$obj = self::requireLogin($exitPath);
|
||||
}
|
||||
else{
|
||||
$obj = self::Instance();
|
||||
}
|
||||
|
||||
return $obj->userGrade;
|
||||
}
|
||||
|
||||
/**
|
||||
* 로그인한 유저의 전역 id(숫자)를 받아옴
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public static function getUserID(bool $requireLogin = false, string $exitPath = ROOT){
|
||||
if($requireLogin){
|
||||
$obj = self::requireLogin($exitPath);
|
||||
}
|
||||
else{
|
||||
$obj = self::Instance();
|
||||
}
|
||||
|
||||
return $obj->userID;
|
||||
}
|
||||
|
||||
public function isLoggedIn() {
|
||||
if($this->noMember()){
|
||||
if($this->userID){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
@@ -74,10 +148,6 @@ class Session {
|
||||
}
|
||||
}
|
||||
|
||||
public function noMember() {
|
||||
return $this->get('noMember');
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user