CakePHP сессия без файлов cookie - PullRequest
       9

CakePHP сессия без файлов cookie

2 голосов
/ 09 сентября 2010

Я хочу создать приложение, которое не нуждается в файлах cookie, но все еще имеет сеансы. Для этого я создаю SessionID и беру его с собой в URL. Моя проблема сейчас в том, что помощник HTML не распознает это, и все выводимые ссылки не имеют идентификатора сеанса.

Нужно ли сказать CakePHP, чтобы сделать это, или нет никакого механизма для этого? (принимая идентификатор сессии в каждой ссылке)

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

Я только что выполнил реализацию сеанса url в cakephp, я установил в cakephp использование trans_sid, а не куки:

ini_set("session.use_cookies",0);
ini_set("session.use_trans_sid",1);

это, вероятно, можно сделать с помощью: http://bakery.cakephp.org/articles/admad/2009/09/02/how-to-bend-cakephp-s-session-handling-to-your-needs и использовал beforefilter дляпрочитать параметр URL-адреса формы идентификатора сеанса и установить из него идентификатор сеанса, а также файл cookie, если идентификатор сеанса не был задан в качестве параметра URL-адреса

// Use sid from post
if (!empty($this->params['url']['sid'])) {
    $this->Session->id($this->params['url']['sid']);
}
// Or failover to cookie
else
{
    $this->Session->id($this->Cookie->read('CAKEPHP'));
}

Не забудьте переопределить функцию URL-адреса в классе AppHelper

function url($url = null, $full = false) {
    return parent::url($url, $full)."/?sid=".session_id();
}

и перенаправление и прошивка в классе AppController

function redirect($url, $status = null, $exit = true) {
    $url = $url."?sid=".session_id();
    return parent::redirect($url, $status, $exit);
}

function flash($message, $url, $pause = 1, $layout = 'flash') {
    $url = $url."?sid=".session_id();
    return parent::flash($message, $url, $pause, $layout);
}
3 голосов
/ 09 сентября 2010

Это случай "в CakePHP все еще есть PHP". Насколько мне известно, HtmlHelper по умолчанию не прикрепляет никаких значений сеанса, поскольку Cake предпочитает сеансы cookie. Вы можете использовать стандартные инструменты PHP, чтобы изменить это, хотя.

Во-первых, вам нужно настроить обработку файлов cookie . Подробности смотрите здесь: Как настроить обработку сессии CakePHP для ваших нужд . Затем вам нужно решить, использовать ли PHP * функциональность trans-sid или использовать SID константу в качестве средства для передачи идентификатора сеанса. Если последнее, вы можете создать собственный метод AppHelper::url, чтобы автоматически включать его в каждую ссылку. Смотрите здесь для решения аналогичной проблемы: Добавление префикса для каждого URL в CakePHP .

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