Перенаправление сессий без файлов cookie в PHP без перехода по ссылке - PullRequest
0 голосов
/ 28 февраля 2011

Я боролся с решением для сеансов без файлов cookie. Конечно, решение без сеансов без файлов cookie является удивительным. У меня проблемы с его реализацией, потому что я не могу прочитать информацию о сеансе после перенаправления на другую страницу.

Вот мой тестовый код в testcode.php

<?php
ini_set('session.use_trans_sid', '1');

session_start();

if (isset($_GET['pagecode'])) {
    session_id($_GET['pagecode']);
print_r($_SESSION); // **cannot read session information here**
exit();
}

if (isset($_SESSION['cookieconfirmed']) && $_SESSION['cookieconfirmed'] == 1) {

} else {
/** Checks if the user's browser is cookie-enabled **/
    if (isset($_GET['redirected'])) {  // if the page has gotten redirected
        $_SESSION['cookieconfirmed'] = 1;  // confirmed the cookie-disability
        if (isset($_COOKIE['testcookie'])) {
            header ('location: testcode.php');
        } else {
           header('location: testcode.php?pagecode=' . session_id());
        }
    } else {
       setcookie('testcookie', 'OK');  //sets a test cookie.
       header('location: testcode.php?redirected=1'); // redirects the page to check     cookie-disability
    }

    exit(0);
}
?>

Как видите, этот код не работает. но если я перенаправлю на другую страницу, нажав на ссылку, это работает хорошо. Вот код в testcode.php :

<?php
ini_set('session.use_trans_sid', '1');

session_start();

if (isset($_GET['pagecode'])) {
    session_id($_GET['pagecode']);
print_r($_SESSION); // **able to read session information here**
exit();
}

if (isset($_SESSION['cookieconfirmed']) && $_SESSION['cookieconfirmed'] == 1) {

} else {
/** Checks if the user's browser is cookie-enabled **/
    if (isset($_GET['redirected'])) {  // if the page has gotten redirected
        $_SESSION['cookieconfirmed'] = 1;  // confirmed the cookie-disability
        if (isset($_COOKIE['testcookie'])) {
            header ('location: testcode.php');
        } else {
           echo '<a href="testcode.php?pagecode=' . session_id() . '">Click here to continue</a>';
        }
    } else {
       setcookie('testcookie', 'OK');  //sets a test cookie.
       header('location: testcode.php?redirected=1'); // redirects the page to check     cookie-disability
    }

    exit(0);
}
?>

Как я могу заставить это работать без нажатия на ссылку?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011
ini_set('session.use_trans_sid', '1');

Вы должны иметь это на каждой из ваших страниц PHP - вы не можете сделать это только в сценарии обработки сеанса.Если он не включен, когда PHP генерирует страницу, он не будет вставлять идентификатор сессии в формы и URL-адреса на этой странице.Таким образом, было бы лучше, если бы вы поместили это в свой php.ini или, по крайней мере, в httpd.conf / .htaccess (как php_value), чтобы сделать его глобальным вариантом для всех скриптов.

0 голосов
/ 22 января 2014
PHP function for this is :


function append_sid($link) {
    if(session_id() !== NULL && !isset($_COOKIE['PHPSESSID'])) {
        if(strpos($link, "?") === FALSE) {
            return $link . "?PHPSESSID=" . session_id();
        } else {
            return $link . "&PHPSESSID=" . session_id();
        }
    } else {
        return $link;
    }
}


Javascript Function for this is:


function append_sid(link) {
    <?php if(session_id() !== NULL && !isset($_COOKIE['PHPSESSID'])) { ?>
        var session_id = '<?php echo session_id ?>';
        if(link.indexOf('?') == -1) {
            return link + '?PHPSESSID=' + session_id;
        } else {
            return link + '&PHPSESSID=' + session_id;
     }
    <?php } else { ?>
        return link;
    <?php } ?>
}


A caveat – passing session id by URL requires the session.session.use_trans_sid tio be set to 1. 

php_value session.use_trans_sid = 1 in the .htaccess file. You can also try the function:

ini_set('session.use_trans_sid', '1')
...