Baffer
@Baffer
Начинающий веб-разработчик

Не сохраняется сессия,причина?

Дело в том, что есть переключатель языков

//session_start();
header('Cache-control: private'); // IE 6 FIX

if(isset($_GET['lang'])) {
    
    $lang = $_GET['lang'];

    // Register the session and set the cookie.
    $_SESSION['lang'] = $lang;

    setcookie("lang", $lang, time() + (3600 * 24 * 30));
    
    } else if(isSet($_SESSION['lang'])) {
    
    $lang = $_SESSION['lang'];
    
    } else if(isSet($_COOKIE['lang'])) {
    
    $lang = $_COOKIE['lang'];
    
    } else {
    
    $lang = 'en';
    
    }

switch ($lang) {
  case 'en':
  $lang_file = 'english.php';
  break;
        
  case 'ru':
  $lang_file = 'russian.php';
  break;
    
  default:
  $lang_file = 'english.php';

}

include_once 'languages/'.$lang_file;


Есть переключатель языков, он работает, но после перезагрузки страницы или же переход на другую страницу язык сбрасывается на стандартный.
В самом вверху есть //session_start(); , дело в том что в init.php (корневой файл) уже есть сессия при вызове в этом файле (lang.php) выходит ошибка что Заголовки были отправлены.. но с этой ошибкой язык не сбрасывается.. а прекрасно работает.

сам переключатель
<a href="lang/en" class="footer-link pt-3">English</a>
 <a href="lang/ru" class="footer-link pt-3 ml-4">Russian</a>


путь в .htaccess
RewriteRule ^lang/(.*)?$ index.php?router=feed〈=$1 [L]
  • Вопрос задан
  • 323 просмотра
Решения вопроса 1
@Vitsliputsli
Зачем это:
RewriteRule ^lang/(.*)?$ index.php?router=feed〈=$1 [L]
?
В итоге, вы отправляете запрос:
server.com/lang/ru
Apache преобразовывает запрос, и в php будет GET-параметр:
$_GET['router'] = 'feed〈=en'
а в скрипте вы проверяете $_GET['lang'].
Быть может проще удалить правило в Апаче (можно и не удалять) и изменить переключатель на:
href="?lang=en", т.к. в таком виде ожидает данные ваш обработчик.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@egormmm
Борітеся — поборете!
Убери header из этого файла
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы