안녕하세요, 내 문제를 알려드립니다. PHP로 개발 된 응용 프로그램을 가지고 있으며, Codeigniter는 Wiroos에서 호스팅되는 웹에서 실행됩니다. 모든 것이 올바르게 작동했지만 시간이 지남에 따라 애플리케이션에 동시에 액세스하는 사용자가 더 많았으며 (다음) 문제가 발생하기 시작했습니다.다른 사용자의 세션에 대한 사용자 액세스
사용자 A가 위치 A에서 로그인하면 세션 A가 생성됩니다. 동시에 B 위치의 사용자 B가 응용 프로그램에 액세스하는 경우 사용자 A의 세션은 자동으로 위치 B에로드됩니다. 가능하면 가능합니까?
난 당신이 나에게
public function ingresar(){
$correo = $this->security->xss_clean(strip_tags($this->input->post('correo')));
$pass = md5($this->security->xss_clean(strip_tags($this->input->post('password'))));
$Usuarios = new Usuario_Model();
$result = $Usuarios->login($correo, $pass);
if(count($result)>0){
foreach($result as $u){
$this->session->unset_userdata('id');
$this->session->unset_userdata('mail');
$this->session->unset_userdata('nombre');
$this->session->unset_userdata('activo');
$this->session->unset_userdata('logo_empresa');
$this->session->unset_userdata('nombre_empresa');
$this->session->unset_userdata('id_empresa');
$this->session->unset_userdata('nivel');
$this->session->unset_userdata('estado_sesion');
$this->session->set_userdata('id', $u->id);
$this->session->set_userdata('mail', $u->mail);
$this->session->set_userdata('nombre', $u->nombre);
$this->session->set_userdata('activo', $u->activo);
$this->session->set_userdata('nivel', $u->nivel);
$this->session->set_userdata('nombre_empresa', $u->nombre_empresa);
$this->session->set_userdata('id_empresa', $u->id_empresa);
$this->session->set_userdata('logo_empresa', $u->logo_empresa);
$this->session->set_userdata('avatar_user', $u->avatar_user);
$this->session->set_userdata('estado_sesion', TRUE);
redirect(base_url()."panel");
}//End foreach
}else{
$this->session->set_flashdata('mensaje', 'El usuario o password es incorrecto');
redirect(base_url()."login/index/1");
//$this->index(1);
}//End if
패널 컨트롤러
로그인 컨트롤러
public function index($estadoLogin = 0){
if($this->session->userdata('estado_sesion'))
{
redirect(base_url()."panel");
}
$data['estadoLogin'] = $estadoLogin;
$data['title'] = "Iniciar Sesión - LandingApp";
$data['bodyClass'] = "external-page sb-l-c sb-r-c";
$this->load->view('templates/header',$data);
$this->load->view('login/loginbox', $data);
}//End method index
로그인 방법을 도울 수 있는지 당신이 내 응용 프로그램의 코드를 보여
public function index(){ $id = $this->session->userdata('id'); $id_empresa = $this->session->userdata('id_empresa'); $data_session['title'] = "Panel General"; $data_session['opcionMenu'] = "panel"; $data_session['bodyClass'] = "dashboard-page"; $data_session = $this->session_data_lib->set_data_session($data_session); //cargo las variables de sesion if ($data_session['nivel']==1 || $data_session['nivel']==2){ $data_counters = $this->counters_lib->get_admin_counters(); //cargo las variables de contadores }else{ $data_counters = $this->counters_lib->get_user_counters(); //cargo las variables de contadores } $this->load->view('templates/header', $data_session); $this->load->view('templates/menu_top', $data_session); $this->load->view('templates/menu_left', $data_counters); if ($data_session['nivel']==0) { $this->load->view('panel/panel_user',$data_counters); }else{ $this->load->view('panel/panel_admin',$data_counters); } $this->load->view('templates/footer',$data_counters); }//End method index
Session_Data_lib> 내가 버전 3.0에 CodeIgniter를 마이그레이션, 심지어 내가/설정/config.php를
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_sessions';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
응용 프로그램에서 다음과 같은 구성을 만들려고
public function set_data_session($data_session){
$data_lib_session['title'] = $data_session['title'];
$data_lib_session['opcionMenu'] = $data_session['opcionMenu'];
$data_lib_session['bodyClass'] = $data_session['bodyClass'];
$data_lib_session['nombre'] = $this->CI->session->userdata('nombre');
$data_lib_session['userid'] = $this->CI->session->userdata('id');
$data_lib_session['nivel'] = $this->CI->session->userdata('nivel');
$data_lib_session['avatar_user'] = $this->CI->session->userdata('avatar_user');
$data_lib_session['logo_empresa'] = $this->CI->session->userdata('logo_empresa');
$data_lib_session['nombre_empresa'] = $this->CI->session->userdata('nombre_empresa');
$data_lib_session['id_empresa'] = $this->CI->session->userdata('id_empresa');
$data_lib_session['arr_css'] = array("absolute_admin/assets/fonts/iconsweets/iconsweets.css");
$data_lib_session['lastSegs'] = $this->CI->panel_model->get10LastSeg($this->CI->session->userdata('id_empresa'));
return $data_lib_session;
}//End method set_data_session
set_data_session 시도 할 다른 것을 알지 못한다면 서버 구성이 될 수 있다는 느낌이 들지만이 외의 지원에서 응답을받지 못했습니다.
Google 서버에는 nginx에서 관리하는 마이크로 캐시 계층이 있으며이 동작은 일 수 있습니다. 이제 도메인에 대해 비활성화했습니다. 다시 시도해주세요.
명백하게 문제가 지속됩니다. 나는 서로 다른 위치에있는 두 명의 서로 다른 사용자가 서버를 컨설팅 할 때 다른 서버의 세션에 액세스 할 수있는 방법을 이해하지 못합니다. 나는 네가 나를 도울 수 있기를 바란다, 고마워!
'$ pass = md5 (...)'MD5 해시는 더 이상 안전하지 않으므로 'password_hash'를 사용하도록 변경해야한다고 생각합니다. http://php.net/manual/en/function.password-hash .php 또한 로그인 페이지에서이 모든 기능은 절반이 아닌 사용자 모델에 포함되어야합니다. – ArtisticPhoenix
위 정보를 제공 할 수있는 최선의 코드를 검토했습니다. 이제는 침대가 있습니다. – ArtisticPhoenix
Artistic Phoenix, 답장을 보내 주셔서 감사합니다! 나는 당신의 답을 시험해 보려고 노력할 것이지만, 문제는 아마도 로그인 논리가 아니라 세션 일 것이다. 가능한 빨리 회신을 드리겠습니다 – Microsource