Session_start

inferno16

Registered
Имам следното запитване, когато стартирам сесия и пред нея има дори и 1 интервал, трябва да ми се покаже грешка, нали така? Е защо когато нарочно го направя не ми отчита? Мога да го сложа и в средата и в края на кода и пак никаква реакция няма. Някой има ли идея къде може да е проблемът? :idea:

Edit: Използвам XAMPP и не ползвам ob_start().
 
Постави малко код за да ти помогнем ! Принципно в сесия се опитай да въвеждаш само цифри за да си правиш по лесно проверка с int :)
 
Какво значение има кодът надолу дори и да е така:
PHP:
 <?php
session_start();
?>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css">
		<title>Вход</title>
	</head>
	<body>
		<h2 align="center">Вход</h2>
		<form method="post" action="">
			<table>
				<tr>
					<td>Име: </td>
					<td><input type="text" name="user" /></td></tr><tr>
					<td>Парола: </td>
					<td><input type="password" name="pass" /></td></tr><tr>
					<td colspan="2"><input type="submit" name="login" value="Вход" id="btn"/></td></tr>
			</table>
		</form>
	</body>
</html>
пак трябва да ми покаже грешка защото оставям празно място пред отварящия таг на php. Ако го сложа по надолу в кода отново не отчита нередност. Просто не видях смисъл да продължа да пиша ако сесията не работи.

Edit: не знам защо така ми разкрачи кода това нещо :shock:
 
Хората питат защо им дава грешка, а ти се притесняваш защо не ти дава :D Еми така ти е настроен сървъра. Не виждам смисъл да се притесняваш от нещо. Щом не ти дава грешка, значи работи коректно. Ти какво се мъчиш да изкараш грешка ли ? :D


И как аджеба разбра, че не ти работи сесията при положение, че не ти дава грешка.
Когато едно нещо не ти прави проблем се възползвай от него. Щом не прави проблем, значи работи коректно.
 
Може да ти изглежда странно но тази грешка по точно warning (предупреждение) реших да го предизвикам нарочно. А на мен именно това ми е идеята искам да виждам всички възможни проблеми.

Edit: Някой с някакви предложения? Аз ли бъркам някъде или това е от php.ini? :cry:
 
Я виж да не е спрян Error-a в php.ini

display_errors = On - ако е off направи го оn
 
inferno16 каза:
Може да ти изглежда странно но тази грешка по точно warning (предупреждение) реших да го предизвикам нарочно. А на мен именно това ми е идеята искам да виждам всички възможни проблеми.

Edit: Някой с някакви предложения? Аз ли бъркам някъде или тожа е от php.ini? :cry:

Ама ти сериозно ли ?

Еми прочети отново какво ти казах. Всеки сървър възприема сесията и разни други функции по различен начин. Това, че на теб не ти вади грешка показва, че няма каква грешка да ти дава.
Функцията работи коректно. Като не и вярваш просто я пробвай и готово.

И си задай най-отгоре error_reporting(E_ALL);
 
За 2 варианта се сещам:
1. Както казаха може да са ти изключени грешките
2. Виж в php.ini има опция да се включва изходния буфер автоматично
 
Провери php.ini дали не ти е спряно показването не грешките. И е точно от това почти на 100% съм сигурен, защото създаването на сесията е прието да е най-отгоре във файла и дори един интервал пред нея предизвиква грешка без значение какъв е сървъра.
TryMe тук не мога да се съглася с тебе тъй като е добре грешките винаги да се показват за да могат да се вземат мерки и предудвратят, акогато са спряни ко праим? седим и са чудим ко става.
 
Мисля, че не си разбрал каква грешка по-точно ти дава. Грешката се поражда от това, че сървърът вече е върнал някакъв резултат до браузърът (т.е. хедърите). Бисквитките(cookies) са част от тези хедъри, а сесиите използват бисквитка за да помнят коя сесия на кой потребител принадлежи (PHPSESSID). PHP парсва всички интервали преди <? или <?php и не изпраща нищо на браузърът.
ob или output buffering е метод за извеждане на информация. Идеята е, че целият код, който отпечатваш и информацията в него се записват първо в паметта на сървъра и след това се изпращат към браузъра, а без него всеки бит, който отпечатваш се изпраща мигновено.

ob е изключително удобен, ако се налага да парснеш html с php в него без да го отпечатваш. Пример за това са съобщенията. С ob можеш да си отпечаташ имейла в паметта и след това с ob_get_clean да получиш резултатът (без да го пращаш към браузъра), който да изпратиш на пощата на потребителя.
 
kikity_94 каза:
Провери php.ini дали не ти е спряно показването не грешките. И е точно от това почти на 100% съм сигурен, защото създаването на сесията е прието да е най-отгоре във файла и дори един интервал пред нея предизвиква грешка без значение какъв е сървъра.
TryMe тук не мога да се съглася с тебе тъй като е добре грешките винаги да се показват за да могат да се вземат мерки и предудвратят, акогато са спряни ко праим? седим и са чудим ко става.

А къде съм казал, че е лошо да се виждат грешките ? Грешките се пускат, докато сайта се прави. След това се спират поради причини, които едва ли има нужда да обяснявам.
Просто, това че не му извежда грешка сесията, не значи, че въобще има такава.
Да си пусне грешките с error_reporting(E_ALL) и да види. И тогава, ако не му изкара, да си спре буферирането, и ако тогава не му изкара и какво ? Май ще се окажа прав.
А и нищо не му пречеше да пробва със $_SESSION дали въобще ще му работи. Ако не му работи, значи има някакъв проблем. Но той тръгва отзад напред да дири повредата, която даже не се знае дали я има.
 
PHP НЕ парсва празните интервали преди отварящият таг и този интервал се визуализира на екран(ест това не може да се види на пръв поглед) от там php "вижда" това "и си прави заключение", че щом има визуакизация(изход) на информация на екран следователно хедърите от сървъра са пратени към браузъра, следователно сесията няма да може да работи тъй като браузъра няма да приеме сесийната бисквитка.Когато има включен output buffering в случая празния интервал няма да се визуализира директно на екран и всички ще са доволни.
Щом не ти дава ПРЕДУПРЕЖДЕНИЕ то "проблема" ти е до настройките на конфигурационния файл php.ini там трябва да направиш output_buffering = Off както ти е споменато по-горе.

Погледни също тази тема, която касае точно твоя случай.
 
Съжалявам за ужасно късният отговор, но имах проблеми с компютъра. Оказва се че наистина не е имало грешка, защото опцията output_buffering е била пусната. Много странно че не съм пипал настройките в .ini файла а тази опция не беше по подразбиране +1 на StormBreaker защото той успя да познае от къде е проблема(ако изобщо може да се нарече проблем).
 

Back
Горе