|
|
|
| пишу скрипт на админку с авторизацией через куки. на локальном сервере работает а на хостинге нихочет выбивает ошибки
Warning: Cannot modify header information - headers already sent by (output started at /var/www/site/index.php:19) in /var/www/site/index.php on line 7
Warning: Cannot modify header information - headers already sent by (output started at /var/www/site/index.php:19) in /var/www/site/index.php on line 8
|
подскажите в чём проблема, что неоходимо для правильной работы с setcookie
возможно я допустил ошибки при "чистописании" так как с куками работаю первый раз
ниже привожу пример скрипта, если чё нетак - тыкните пальцом....
<?
@session_start();
function cooksa()
{
global $name_user, $pass_user;
setcookie("name",$name_user,time()+24*60*60);
setcookie("pass",$pass_user,time()+24*60*60);
}
$str[0] = "111111";
$str[1] = "111111";
define("INDEX", "yes");
include "inc/include/config.php";
if(!empty($_POST['name']) && !empty($_POST['pass']))
{
if(($str[0] == $_POST['name']) && md5($str[1]) == md5($_POST['pass']))
{
$name_user= $str[0];
$pass_user= md5($str[1]);
cooksa();
print "<meta http-equiv=refresh content='0; url=index.php?show=index'>\n";
}
}
if ((!empty($_COOKIE['name'])) or (!empty($_COOKIE['name'])))
{
if ($_COOKIE['name'] != $str[0] || $_COOKIE['pass'] != md5($str[1]))
{
include "inc/templates/" . $admin_config['templates'] . "/form.tpl";
exit;
}
else
{
$url = $_SERVER['REQUEST_URI'];
$array = explode("/",$url);
$count=count($array);
$count-=1;
if ($array[$count] == "index.php" || $array[$count] == null)
{
print "<meta http-equiv=refresh content='0; url=index.php?show=index'>\n";
}
else
{
include "inc/include/http/http.php";
$CurSec=empty($_GET['show'])?null:$_GET['show'];
if(empty($CurSec))
include("./inc/index.php");
elseif(file_exists("./inc/".basename($CurSec).".php"))
include("./inc/".basename($CurSec).".php");
else
{
die("Tакой страницы не существует");
}
}
}
}
else
{
$url = $_SERVER['REQUEST_URI'];
$array = explode("/",$url);
$count=count($array);
$count-=1;
if ($array[$count] == "index.php" || $array[$count] == null)
{
include "inc/templates/" . $admin_config['templates'] . "/form.tpl";
exit;
}
else
{
@Header("Location: index.php");
}
}
?>
|
form.tpl
<table width="100%" height="100%">
<tr>
<td align="center" valign="middle">
<table width="250" align="center" style="border: 1 #526396 solid">
<tr>
<td align="center">
<form name="FormName" action="" method="post">
<br><br><input name="name" type="text"><br><br>
<input name="pass" type="password"><br><br>
<input type="submit" value="ÂÕÎÄ">
</form>
</td>
</tr>
</table>
</td>
</tr>
</ftable>
|
| |
|
|
|
|
|
|
|
для: Webmaster-X
(11.01.2007 в 19:22)
| | Выводу заголовков не должен предшествовать НИКОЙ другой вывод информации.
А куки ставятся, как раз через заголовки
Сначала устанавливай куки, потом выводи инфу через echo | |
|
|
|
|
|
|
|
для: ddhvvn
(11.01.2007 в 19:35)
| | >Выводу заголовков не должен предшествовать НИКОЙ другой вывод информации.
Как сказал cheops....это толькое если отсутствует буферизация или что то такое....у меня почему то всегда как не делай работало)) | |
|
|
|
|
|
|
|
для: LuxeMate
(11.01.2007 в 19:46)
| | а, чтоже можна сделать?
я пробывал в самом верху скрипта ставить куки - ошибок не выдавал но куки не записывались.
хотя если ставить какойто толковый скрипт(и без htaccess средств) - всё работает..... | |
|
|
|
|
|
|
|
для: LuxeMate
(11.01.2007 в 19:46)
| | При буфферизации вывод информации не происходит, а накапливается в некий буффер, который может быть сброшен в любой момент. | |
|
|
|
|
|
|
|
для: Sergey89
(11.01.2007 в 20:18)
| | >При буфферизации вывод информации не происходит, а накапливается в некий буффер, который может быть сброшен в любой момент.
тоесть если я правильно понял, неоходимо сбросить буфер перед записыванием куков?
если да, тогда как это сделать? | |
|
|
|
|
|
|
|
для: Webmaster-X
(11.01.2007 в 20:25)
| | Нет. Вот пример с использованием буфферазации.
Предупреждение есть:
<?php
print 'Hello world!';
session_start();
$_SESSION['count']++;
print $_SESSION['count'];
?>
<a href="?">Обновить</a>
|
Нет:
<?php
ob_start();
print 'Hello world!';
session_start();
$_SESSION['count']++;
print $_SESSION['count'];
ob_end_flush();
?>
<a href="?">Обновить</a>
|
| |
|
|
|
|
|
|
|
для: Webmaster-X
(11.01.2007 в 20:25)
| | есть вариант устанавливать куки средствами JS. Тогда можно устанавливать куку когда угодно. Вот скрипт:
function SetCookie (name, value, expires, path, domain, secure) {
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
|
если что не понятно, то ищи на гугле по запросу Работа с Cookie в JavaScript - статей на эту функцию много везде с подробным описанием. | |
|
|
|
|
|
|
|
для: NIK
(11.01.2007 в 21:38)
| | Куки - очень не безопасно!
Будет большая вероятность взломать твою систему.. | |
|
|
|
|
|
|
|
для: skazi
(11.01.2007 в 23:55)
| | Угу. Лучше юзать сессии. И запоминать админа только на текущий сеанс. При запуске нового сеанса требовать ввода имени и пароля. | |
|
|
|
|
|
|
|
для: Sergey89
(11.01.2007 в 23:59)
| | скажите, я изменил начало скрипта и всё заработало
привожу пример, скажите это провильно или нет?
<?
@session_start();
ob_start();
error_reporting(1);
$str[0] = "111111";
$str[1] = "111111";
ob_end_clean();
define("INDEX", "yes");
include "inc/include/config.php";
if(!empty($_POST['name']) && !empty($_POST['pass']))
//продолжение выше
?>
|
| |
|
|
|