Laravel 4에서는 한 번에 한 사용자 당 한 세션 만 허용 할 수 있습니까?Laravel : 한 번에 한 사용자 당 하나의 세션 만 허용
예를 들어, 사용자가 로그인하여 이미 다른 세션이있는 경우 해당 다른 세션이 취소되며, 이유를 알려주는 방법이 바람직합니다.
아마 도움이된다면 Amazon ElastiCache에서 Redis 세션 드라이버를 사용하고 있습니다.
Laravel 4에서는 한 번에 한 사용자 당 한 세션 만 허용 할 수 있습니까?Laravel : 한 번에 한 사용자 당 하나의 세션 만 허용
예를 들어, 사용자가 로그인하여 이미 다른 세션이있는 경우 해당 다른 세션이 취소되며, 이유를 알려주는 방법이 바람직합니다.
아마 도움이된다면 Amazon ElastiCache에서 Redis 세션 드라이버를 사용하고 있습니다.
그래, 나는 내 프로젝트와 비슷했다.
따라서 사용자 모델에 다른 속성 인 last_sessid를 추가해야합니다.
public function swapping($user) {
$new_sessid = \Session::getId(); //get new session_id after user sign in
$last_session = \Session::getHandler()->read($user->last_sessid); // retrive last session
if ($last_session) {
if (\Session::getHandler()->destroy($user->last_sessid)) {
// session was destroyed
}
}
$user->last_sessid = $new_sessid;
$user->save();
}
이제 사용자가 활성 세션을 보유하고 있고 다른 브라우저에 로그인하면 첫 번째 세션이 제거됩니다.
P. 내 나쁜 영어 : 죄송는
세션 재생성이 아닌가요? GMail과 같은 문제가 있다면 5 대의 컴퓨터에 로그인 할 수 있으며 다른 4 대의 사용자를 로그 아웃하려고합니까? 나는 당신의 코드가 자신의 문제를 해결하지 못한다고 생각합니다. –
예 : firefox를 열고 로그인 한 것보다 크롬에 로그인 한 상태에서 크롬으로 돌아가서 로그인 한 사용자에 대해서만 권한이 필요하면 smth 필터가 예외를 throw하거나 오류와 함께 다시 리디렉션됩니다. etc ... 그리고 나를 위해,이 코드는 완벽하게 작동합니다 1 user - 1 session – xAoc
하지만 사용자가 여러 곳에서 동시에 로그인 할 수 없도록 한 다음 다른 모든 사용자들과 로그 아웃하도록 선택할 수는 없습니다. –
같이 그것을 해결하기 위해 관리 (사용자 당) 레디 스에서 세션 id의
배열
예 : user.sessions.[userid] [ .... ]
로그인에
필터 전에 :
foreach (json_decode($redis->get('user.sessions.$userId')) as $sesId) {
Session::getHandler()->destroy($sesId));
}
// add session to redis
$redis->set('user.sessions.$userId', json_encode([Session::getId()]));
이렇게하면 숫자 세션 한도를 만들 수 있으며 Redis에서 최대 NumActiveSessions - MaxSessions
까지 삭제할 수 있습니다.
laravel 5.2의 경우 make:auth
명령을 실행 한 후 AuthController.php에 public function authenticated(Request $request,User $user)
메서드를 만들고 해당 메서드에서 로그인 후 원하는 것을 할 수 있습니다. 우리가 맨 위에있는 AuthController에 추가 사용자 당 하나의 세션에 대한 :
use Illuminate\Http\Request;
use Auth;
그리고 기능 추가 :
public function authenticated(Request $request,User $user){
$previous_session = $user->session_id;
if ($previous_session) {
\Session::getHandler()->destroy($previous_session);
}
Auth::user()->session_id = \Session::getId();
Auth::user()->save();
return redirect()->intended($this->redirectPath());
}
가 SESSION_ID 열이 사용자 테이블을 변경하기위한 마이그레이션을 추가해야합니다.
한 번에 하나의 세션 만 활성화 할 수 있으며 여러 데이터를 넣으면 여러 개의 "세션"을 동시에 가질 수 있습니다. –
무엇을 의미합니까? 기본적으로 Laravel 4에서는 사용자가 다른 컴퓨터에서 동일한 계정으로 여러 번 로그인 할 수 있으며 모든 세션이 유효합니다. 일단 로그인하면 UserId에 연결된 다른 모든 세션이 취소됩니다. –
좋아, 지금은 이해하지만 이것을 해결하기 위해서는 주어진 사용자에게 연결된 모든 세션에 대해 세션 드라이버를 쿼리하고 삭제해야합니다. 일반적으로 나는 그것을 데이터베이스에 넣고 다른 것들은 지우지 만, 당신의 경우 나는 해결책을 알지 못한다. –