Session 클래스 수정.

- Session클래스 내에서 global setter, getter 재정의
- Session클래스에서 static 함수로 getUserID, getUserGrade 재정의
- 내부 서버에서 getUserID, getUserGrade를 쓰던 것 Session 클래스로 통일
- SESSION.php가 requireLogin 기능을 수행하던것을 Session의 static 함수로 통합
This commit is contained in:
2018-03-24 20:04:55 +09:00
parent 4bcdf8b208
commit a3f83d1e95
110 changed files with 367 additions and 343 deletions
+100 -30
View File
@@ -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() {
}
}