PHP-сессия доступна для разных пользователей - PullRequest
0 голосов
/ 06 ноября 2011

Я новичок в php и пытаюсь сохранить объект данных сеанса (который я создаю в моем приложении), используя _SESSION ['SESSION_DATA'] = $ sessionData.Когда пользователь входит в мое приложение, я пытаюсь извлечь объект данных сеанса из сеанса, если объект инициализирован, то я предполагаю, что пользователь уже вошел в систему и использует данные из сеанса.Если объект не задан, мы определяем, что пользователь входит в систему, и пытаемся создать объект данных сеанса и поместить его в сеанс.

Когда я вхожу в систему с первым идентификатором пользователя, приложение работает нормально.Но когда я вхожу с другим идентификатором пользователя одновременно, в моем действии входа в систему я вижу, что объект данных сеанса извлекается из сеанса, который принадлежит первому пользователю.

Может кто-то посоветовать, как с этим справитьсяпроблема.Мы используем Zend Framework.Есть ли что-то в Zend, чтобы справиться с этим делом неявно.

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Я предполагаю, что вы имеете в виду вход в систему с другим пользователем с использованием того же браузера на том же компьютере, в то время как другой пользователь уже вошел в систему?Если это так, я не думаю, что вы можете отделить его, так как сессия является сессией браузера.

0 голосов
/ 06 ноября 2011

Вы должны использовать Zend_Auth для аутентификации. Подробнее об этом вы можете прочитать здесь: manual.zfdes.com/de/zend.auth.html

Вот как я использовал Zend_Auth:

        $auth = Zend_Auth::getInstance();
        $authAdapter = new Altergear_Seolista_UserLoginAuthAdapter(
            $loginForm->getLogin(),
            $loginForm->getPassword()
        );

        $result = $auth->authenticate($authAdapter);

Аутентификационный адаптер возвращает новый Zend_Auth_Result с новым идентификатором. Для них я использую объект stdClass. Он заменит старую идентичность.

Вот мой адаптер в качестве примера

<?php

use Doctrine \ ORM \ EntityManager; Класс Altergear_MyApp_UserLoginAuthAdapter реализует Zend_Auth_Adapter_Interface { / ** * Логин * @var строка $ _login * / личное $ _login;

/**
 * The user password
 * @var string $_password
 */
private $_password;

/**
 * The Doctrine EntityManager
 * @var EntityManager $_em
 */
private $_em;
public function __construct( $email, $password )
{
    $registry = Zend_Registry::getInstance();
    $this->_em = $registry->entitymanager;

    $this->_login = $email;
    $this->_password = $password;
}

/**
 * Executes an authentication try
 *
 * @throws Zend_Auth_Adapter_Exception if the authentication failed
 * @return Zend_Auth_Result
 */
public function authenticate()
{
        //check if login is correct
        try{
            $user = $this->_em->getRepository('App_Model_User')
                ->findOneBy(
                    array(
                        '_email' => $this->_login,
                        '_password' => App_Model_User::encodePassword( $this->_password )
                    )
            );
        }catch( Exception $e ){
            throw new Zend_Auth_Adapter_Exception( 'authentication failed', 0, $e );            
        }

        if( $user!==null && $user instanceof App_Model_User && $user->getId() > 0 )
        {
            //login successful

            $identity = new stdClass();
            $identity->user = $user;


            return new Zend_Auth_Result( Zend_Auth_Result::SUCCESS , $identity );
        }else{
            //login failed
            return new Zend_Auth_Result( Zend_Auth_Result::FAILURE, NULL, array('Bitte geben Sie gültige Logindaten an.') );
        }

Кроме того, вы можете работать с Zend_Acl. Я рекомендую вам подключаемый модуль Zend_Controller для управления доступом к вашим контроллерам и действиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...