Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: include нарушает механизм работы сессий
 
 автор: Владимир55   (03.01.2012 в 13:24)   письмо автору
 
 

Имеется файл с именем hides.php, содержащий такой код:
<?php
    ob_start
();
    
session_start();
    
file_put_contents('ses.txt'session_id()); 
    echo 
chr(13).chr(10) . '<script type="text/javascript" src="jquery.js"></script>';
    echo 
chr(13).chr(10) . '<script type="text/javascript" src="grenada.php"></script>';


А в файле grenada.php содержится вот что:
<?php
    ob_start
();
    
session_start();
    
file_put_contents('ses2.txt'session_id());


Если запустить из адресной строки браузера файл hides.php, то в текствовых файлах 'ses.txt' и 'ses2.txt' увидим имена сессий. Эти имена будут одинаковые.

А теперь в html файл пишем код, подключающий hides.php
<?php include("hides.php"); ?>


Браузер закрываем и открываем заново, и вызываем из адресной строки html файл. И в текствовых файлах 'ses.txt' и 'ses2.txt' увидим имена сессий - они РАЗНЫЕ!

Например,
55cf170333547edc0fb75f7a45b55585 - 'ses.txt'  '
542d86be1bc14bfc5ae546bae916a6c3 - 'ses2.txt'


Обновим html файл, не закрывая браузер. Получаем:
542d86be1bc14bfc5ae546bae916a6c3
542d86be1bc14bfc5ae546bae916a6c3


Какой-то тут сложный механизм взаимодействия с html файлом, понять который не удается!

(Попытка использовать в скрипте hides.php session_regenerate_id(); не дала результата).

  Ответить  
 
 автор: flaers   (03.01.2012 в 14:12)   письмо автору
 
   для: Владимир55   (03.01.2012 в 13:24)
 

.

  Ответить  
 
 автор: cheops   (03.01.2012 в 16:25)   письмо автору
 
   для: Владимир55   (03.01.2012 в 13:24)
 

>Браузер закрываем и открываем заново, и вызываем из адресной строки html файл. И в >текствовых файлах 'ses.txt' и 'ses2.txt' увидим имена сессий - они РАЗНЫЕ!
У меня одинаковые (и в ses.txt и в ses2.txt). Каким браузером смотрите, тестовый пример ничего кроме этого кода не содержит?

PS Может у вас и grenada.php кэшируется, перед экспериментом вручную почистите оба файла.

  Ответить  
 
 автор: Владимир55   (03.01.2012 в 19:53)   письмо автору
 
   для: cheops   (03.01.2012 в 16:25)
 

Попробовал во всех браузерах, закрывая их полностью и запуская заново. И удаляя вручную тектовые файлы. Дефект наблюдался усточиво.

Но есть один нюанс - я подключал инклюд так:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>тест.</title>
<?php include("hides.php"); ?>
</head>


Если
session_start(); 
разместить до <html>, то дефект исчезает!

Похоже, что причиной всему именно это!

Можно ли избавиться от проблемы, сохранив include внутри <head> ?

  Ответить  
 
 автор: elenaki   (03.01.2012 в 19:56)   письмо автору
 
   для: Владимир55   (03.01.2012 в 19:53)
 

session_start() по определению должно быть ДО любого вывода.

  Ответить  
 
 автор: Владимир55   (03.01.2012 в 20:26)   письмо автору
 
   для: elenaki   (03.01.2012 в 19:56)
 

Не факт. На то существует
ob_start(); 

  Ответить  
 
 автор: elenaki   (04.01.2012 в 11:40)   письмо автору
 
   для: Владимир55   (03.01.2012 в 20:26)
 

на каждый ob_start() должен быть свой ob_end_flush(); . а его что-то не видно

  Ответить  
 
 автор: cheops   (03.01.2012 в 21:33)   письмо автору
 
   для: Владимир55   (03.01.2012 в 19:53)
 

>Но есть один нюанс - я подключал инклюд так:
Воспроизвел, все по прежнему - сессия совпадает (если честно, в моем понимании так и должно быть). Пока что-то в голову ничего разумного не приходит, чтобы предположить, почему у вас получаются разные значения.

[поправлено модератором: обсуждение функций управления буфером выделено в отдельную тему]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования