Как мне создавать, записывать и читать данные сеанса в CakePHP?

StackOverflow https://stackoverflow.com/questions/1091030

  •  11-09-2019
  •  | 
  •  

Вопрос

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

В моем приложении есть два данных: form_id и user_id, которые необходимо использовать во всех запросах страниц.Итак, как мне сохранить ее как переменную сеанса и использовать во всем приложении?

РЕДАКТИРОВАТЬ

function register()
{
    $userId=$this->User->registerUser($this->data);
    $this->Session->write('User.UserId',$userId);
    //echo "session".$this->Session->read('User.UserId');
    $this->User->data=$this->data;
    if (!$this->User->validates())
    {
    $this->Flash('Please enter valid inputs','/forms' );
      return;   
    }

$this->Flash('User account created','/forms/homepage/'.$userId);            

}   

Как использовать переменную сеанса 'Пользователь.Ид пользователя' вместо $userId в $this->Flash('Учетная запись пользователя создана','/forms/homepage/'.$userId);

И могу ли я использовать эту переменную во всех своих файлах представления, ведь во всех запросах страниц я также передаю идентификатор пользователя?

РЕДАКТИРОВАТЬ 2

У меня есть 2 контроллера: пользователь и форма.Я записываю идентификатор пользователя в переменную сеанса в файлах пользователей._контроллер.У меня есть файл представления с именем homepage.ctp, действие которого находится в form_controller. Теперь, как я могу использовать переменную сеанса, определенную в user_controller на главной странице?Извините, если задаю глупые вопросы.Я просмотрел книгу тортов, но мои сомнения не развеялись.Я также пробую метод проб и ошибок, поэтому, пожалуйста, помогите мне.

РЕДАКТИРОВАТЬ 3

У меня есть переменная сеанса «uid», которая является идентификатором пользователя в действии домашней страницы контроллера.

       $this->Session->write('uid',$this->data['Form']['created_by']);

Мне нужна та же переменная в методе проектного действия того же контроллера.Когда я даю

             $uid=$this->Session->read('uid');
            echo "uid: ".$uid;

значение не отображается.

Могу ли я использовать переменную сеанса в том же контроллере?

Это было полезно?

Решение 5

Я узнал причину, по которой uid не отображался (отредактируйте 3 часть вопроса).Это произошло из-за глупой ошибки: после закрывающего тега ?> в контроллере был пробел.Теперь он работает нормально.

Другие советы

Пекарня – ваш лучший друг:

http://book.cakephp.org/view/398/Methods

Все операции чтения/записи вашего сеанса принадлежат контроллеру:

$this->Session->write('Person.eyeColor', 'Green');

echo $this->Session->read('Person.eyeColor'); // Green

В торте php вы можете создать такой сеанс

$this->request->session()->write('user_id', 10);

и ты можешь прочитайте значение сеанса вот так

echo $this->request->session()->read('user_id');

Супер Просто!

Вам не нужно писать какой-либо код для создания сеанса, они уже встроены.Затем вы просто используете сеансы чтения и записи, как упоминалось выше.Также смотрите здесь для более подробной информации:

http://book.cakephp.org/2.0/en/core-libraries/comComponents/sessions.htmlИспользуется в контроллерах

http://book.cakephp.org/2.0/en/core-libraries/helpers/session.htmlИспользуется в представлениях

В этом случае это будет:

$this->Flash('User account created','/forms/homepage/'.$this->Session->read('User.UserId'));

и на ваш второй вопрос ответил Джейсон Мий (http://api.cakephp.org/class/session-helper).Вы можете просто использовать это на свой взгляд:

$userId = $session->read('User.UserId');

Медленное и внимательное чтение соответствующих страниц кулинарной книги обычно очень помогает...

когда у меня странное поведение сессии, и это мне помогает.

МОДЕЛЬ:

 function clearAllDBCache() {
    $db =& ConnectionManager::getDataSource($this->useDbConfig);
    $db->_queryCache = array();
   }

`

Получите доступ к своему помощнику SessionHelper в lib/Cake/View/Helper/SessionHelper.php и добавьте метод:

public function write($name = null) {
    return CakeSession::write($name);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top