[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с записью в куки
maestro-lavon
Попробовал добавить на сайте функцию "Запомнить меня":


<form id="form1" name="form1" method="post" action="_login">
<input
name="login" type="text" class="form" />
<input
name="password" type="password" class="form" />
<input
name="save" type="checkbox" value='1' class="form"> Запомнить меня</label>
<input
name="sub" type="submit" value="Войти" class="form" />
</form>



Отправляю в обработчик:


<?
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
if (isset($_POST['save'])) {$save = $_POST['save'];}
if (empty($login) or empty($password))
{
echo ("<h2 class='error'>Вы не ввели логин или пароль</h2>");
}
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
$login = trim($login);
$password = trim($password);
include("blocks/db.php");
$result = mysql_query("SELECT * FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (empty($myrow['password']))
{
echo ("<h2 class='error'>Вы ввели не правильный логин или пароль</h2>");
}
else {
if ($myrow['password']==$password) {
if (isset($_POST['save'])){
/* если выбрали функцию запомнить */
setcookie("login",$myrow[login], time() +9999999); /* строка 84 */
setcookie("password",$myrow[password], time() +9999999); /* строка 85 */
echo "<h2 class='fine'>Вы успешно вошли!</h2>";
}
else {
/* если не выбрали функцию запомнить */
$_SESSION['login']=$myrow['login'];
$_SESSION['id']=$myrow['id'];
echo "<h2 class='fine'>Вы успешно вошли!</h2>";
}}
else {
echo ("<h2 class='error'>Ошибка входа.</h2>");
}
}

?>


Без "Галочки" всё работает!
Как только выключается checkbox выбивает ошибку:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\music\_login.php:12) in Z:\home\localhost\www\music\_login.php on line 84

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\music\_login.php:12) in Z:\home\localhost\www\music\_login.php on line 85

Который день ломаю голову sad.gif((



Спустя 20 минут, 6 секунд (4.09.2010 - 22:30) Lenarfate написал(а):
и не ломай даже! в куках вообще нельзя хранить логин и пасс. wink.gif

Спустя 58 секунд (4.09.2010 - 22:31) maestro-lavon написал(а):
Цитата
и не ломай даже! в куках вообще нельзя хранить логин и пасс.


Ну, и как тогда реализовать данную задумку?

Спустя 45 секунд (4.09.2010 - 22:32) Lenarfate написал(а):
http://irbis-team.com/15/7 например

Спустя 46 минут, 3 секунды (4.09.2010 - 23:18) maestro-lavon написал(а):
Цитата (Lenarfate @ 4.09.2010 - 19:32)
http://irbis-team.com/15/7 например

А можно что нить попроще. Не могу вникнуть в систему.....
Или плиз исправьте код...

Спустя 3 минуты, 54 секунды (4.09.2010 - 23:22) amazing написал(а):
maestro-lavon, да что там вникать , все просто...
А в куках хранить лог, пасс, действительно неприемлемо

Спустя 32 минуты, 3 секунды (4.09.2010 - 23:54) maestro-lavon написал(а):
Что то вообще не могу врубиться: куча кода, куча страниц и ещё .tpl-и всякие....
Помогите!!!!!!!!!!
На что заменить можно:
setcookie("login",$myrow[login], time() +9999999); /* строка 84 */
setcookie("password",$myrow[password], time() +9999999); /* строка 85 */

Спустя 3 минуты, 19 секунд (4.09.2010 - 23:57) Lenarfate написал(а):
ну грубо говоря типа такого

function randStr($num = 10)  
{
$a = range('!', '@');
$b = range('a','z');
$c = range('A', 'Z');

$arr = array_merge($a, $b);
$arr = array_merge($arr, $a);
$arr = array_merge($arr, $c);

$key = '';
$rand = microtime(true);

for($i = 0; $i < $num; $i++)
{
shuffle($a);
$key .= $arr[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
$rand = microtime(true);
}

return $key;
}

$hash = md5(randStr() . $myrow['login']);

setcookie('hash', $hash, time() + 3600 * 24 * 30, '/');

Спустя 11 минут, 46 секунд (5.09.2010 - 00:09) maestro-lavon написал(а):
Попробовал вставить вместо старого кода предложеный.

setcookie('hash', $hash, time() + 3600 * 24 * 30, '/'); /* строка 109 */


Та же ошибка sad.gif

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\music\_login.php:12) in Z:\home\localhost\www\music\_login.php on line 109

Спустя 9 минут, 17 секунд (5.09.2010 - 00:18) Lenarfate написал(а):
потому что setcookie, session_start и header нужно объявлять до любого вывода на экран, html это или echo/print

Спустя 10 минут, 38 секунд (5.09.2010 - 00:29) maestro-lavon написал(а):
Вот весь код страницы:
<?php session_start();?>
<?php
include("blocks/db.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link
rel="SHORTCUT ICON" href="images/favicon.png">
<meta
name="description" content="<?php echo $myrow ['meta_d']; ?>">
<meta
name="keywords" content="<?php echo $myrow ['meta_k']; ?>">
<title><?php
echo $myrow ['title']; ?></title>
<link
rel="stylesheet" type="text/css" href="style.css" />
<?php
include("blocks/js.php");?>
</head>
<body>
<div
id="main_container">
<div
id="header">
<?php
include("blocks/minibut.php");?>
<?php
include("blocks/search.php");?>
</div>
<div
id="main_content">
<div
class="center_content">
<?php
include("blocks/menu.php");?>
<?php
include("blocks/navigation.php");?>
<?

if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
if (isset($_POST['save'])) {$save = $_POST['save'];}
if (empty($login) or empty($password))
{
echo ("<h2 class='error'>Вы не ввели логин или пароль</h2>");
}
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
$login = trim($login);
$password = trim($password);
include("blocks/db.php");
$result = mysql_query("SELECT * FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (empty($myrow['password']))
{
echo ("<h2 class='error'>Вы ввели не правильный логин или пароль</h2>");
}
else {
if ($myrow['password']==$password) {
if (isset($_POST['save'])){
/* если выбрали функцию запомнить */
function randStr($num = 10)
{
$a = range('!', '@');
$b = range('a','z');
$c = range('A', 'Z');

$arr = array_merge($a, $b);
$arr = array_merge($arr, $a);
$arr = array_merge($arr, $c);

$key = '';
$rand = microtime(true);

for($i = 0; $i < $num; $i++)
{
shuffle($a);
$key .= $arr[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
$rand = microtime(true);
}

return $key;
}

$hash = md5(randStr() . $myrow['login']);

setcookie('hash', $hash, time() + 3600 * 24 * 30, '/');
echo "<h2 class='fine'>Вы успешно вошли!</h2>";
}
else {
/* если не выбрали функцию запомнить */
$_SESSION['login']=$myrow['login'];
$_SESSION['id']=$myrow['id'];
echo "<h2 class='fine'>Вы успешно вошли!</h2>";
}}
else {
echo ("<h2 class='error'>Ошибка входа.</h2>");
}
}

?>
<br><br>
<div
align="center"></div><div class="clear"></div></div></div></div>
<?php
include("blocks/footter.php");?>
</div>
</body>
</html>


Что куда?

Спустя 2 часа, 36 минут, 20 секунд (5.09.2010 - 03:05) Krayzie написал(а):
Куки должны устанавливаться до любого вывода. Как варианты могу посоветовать:
1)"подавить" ахтунг
@setcookie('hash', $hash, time() + 3600 * 24 * 30, '/');

2) записать куку джаваскриптом

Спустя 10 часов, 11 минут, 28 секунд (5.09.2010 - 13:16) maestro-lavon написал(а):
C java только на вы. Установить могу, написать никак sad.gif

Спустя 7 часов, 23 минуты, 42 секунды (5.09.2010 - 20:40) Lenarfate написал(а):
на java и не надо, надо на javascript (это сарказм).
зайди на офсайт и почитай.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.