【问题标题】:Different/separate session frontend and backend不同/单独的会话前端和后端
【发布时间】:2013-04-03 04:52:53
【问题描述】:

首先,我的英语不太好。

您好,我的项目有问题

我创建了一个网站,允许您从前端(作为成员)和管理员登录。 我使用不同的用户名和密码登录(前端和后端),但是一旦我从后端注销,前端也会注销。

我认为这是因为我运行了session_destroy() 脚本,它破坏了包括前端会话在内的所有会话。

我尝试使用Zend FrameworkJoomlaPHP 搜索此内容

【问题讨论】:

  • 您是否正在为这些创建会话变量..??
  • 使用不同的会话名称应该可以解决这个问题。
  • @Gumbo : 或者前端和后端不同的会话存储路径
  • 是的,我也为两者创建不同的会话名称

标签: php session login frontend backend


【解决方案1】:

您应该为不同的会话创建不同的变量..

以下是一些示例,以备不时之需。

<?php 
 // you have to open the session to be able to modify or remove it 
 session_start(); 

 // to change a variable, just overwrite it 
 $_SESSION['size']='large'; 

 //you can remove a single variable in the session 
 unset($_SESSION['shape']); 

 // or this would remove all the variables in the session, but not the session itself 
 session_unset(); 

 // this would destroy the session variables 
 session_destroy(); 
 ?> 

希望对你有帮助..

【讨论】:

  • 您好,谢谢您的回答,是否可以只使用 session_unset ?
  • 您可以使用session_unset,但仅当您使用多个会话变量时..这将取消设置所有变量...
  • 所以我可以更改注销脚本我的注销脚本现在是 session_start(); session_destroy();我将其更改为 session_start();未设置($_SESSION['用户名']);未设置($_SESSION['密码']);非常感谢 Hiren,我现在就试试
  • 嗨,Hiren,谢谢它运行良好,我在下面的会话角色系统中使用 unset($_SESSION[something]) 感谢您的帮助:D
【解决方案2】:

我想这是您以 admin 身份登录时的会话:

$_SESSION['user']['id'] = 1;
$_SESSION['user']['group'] = 'admin';
...

但是,当您只是 user 时,这是您的会话:

$_SESSION['user']['id'] = 99;

无论您的logout.php 位于何处,请执行类似的操作:

if ($_SESSION['user']['group'] == 'admin')
    $_SESSION['user']['group'] = null;
else
    destroy_session();

我希望你明白了!

更新

这可能有效:

/* Do NOT unset the $_SESSION['user']['role'] */

if ($_SESSION['user']['role'] == 'user') {

    /* For Users */
    $_SESSION['user']['login'] = false;
    $_SESSION['user']['id'] = null;
    $_SESSION['user']['last-visit'] = null;
    $_SESSION['user']['ip'] = null;
}

if ($_SESSION['user']['role'] == 'admin') {

    /* Unset Admin Specific Variables */
    $_SESSION['admin']['login'] = false;
    $_SESSION['admin']['id'] = null;
    $_SESSION['admin']['last-visit'] = null;
    $_SESSION['admin']['ip'] = null;
}

/* Get rid of session_destroy() */
// session_destroy();

顺便说一句,您只是手动重置变量,这在某种程度上等于完全销毁会话,但仍然保持会话对另一方有效。

更好

/* Assign the `user_id` to the session, when you log in ... */
/* login.php */

$_SESSION[$user_id] = array();

/* Now fill-up the new array with data ... */
$_SESSION[$user_id]['role'] = 'admin';
$_SESSION[$user_id]['login'] = true;

/* When you want to Log out, just simply null the array based on the user_id again */
/* logout.php */

$_SESSION[$user_id] = null;

/* Here you go, as long as you have different user_id in your database, 
   you have separated sessions! */

【讨论】:

  • 您好,谢谢您的回答,我这样做了,我将用户(如管理员和用户)分组,但如果我从后端前端注销也注销,我也尝试为成员和不同的表对于管理员和不同的会话名称,但它仍然无法正常工作:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2011-02-09
  • 2012-12-04
  • 2012-05-25
  • 1970-01-01
相关资源
最近更新 更多