Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
zedox_ru
10 / 10 / 6
Регистрация: 08.04.2012
Сообщений: 56
#1

Ошибка сессии при команде "session_start();" - PHP

08.04.2012, 04:44. Просмотров 763. Ответов 2
Метки нет (Все метки)

Здравствуйте, я задался целью написать свою CMS, дак вот, начал я её делать соответственно с регистрации и маленьких набросков на Index.php.
Почему вот этот код, не выдает ошибок:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
 
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 
 
if (isset($_COOKIE['auto']) and isset($_COOKIE['login']) and isset($_COOKIE['password']))
{//если есть необходимые переменные
    if ($_COOKIE['auto'] == 'yes') { // если пользователь желает входить автоматически, то запускаем сессии
          $_SESSION['password']=strrev(md5($_COOKIE['password']))."b3p6f"; //в куках пароль был не зашифрованный, а в сессиях обычно храним зашифрованный
          $_SESSION['login']=$_COOKIE['login'];//сессия с логином
          $_SESSION['id']=$_COOKIE['id'];//идентификатор пользователя
        }   
    }
 
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существет логин и пароль в сессиях, то проверяем их и извлекаем аватар
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db); 
$myrow = mysql_fetch_array($result);
//извлекаем нужные данные о пользователе
}
?>
<html>
<head>
<title>Главная страница</title>
</head>
<body>
<h2>Главная страница</h2>
 
 
<?php
if (!isset($myrow['avatar']) or $myrow['avatar']=='') {
//проверяем, не извлечены ли данные пользователя из базы. Если нет, то он не вошел, либо пароль в сессии неверный. Выводим окно для входа. Но мы не будем его выводить для вошедших, им оно уже не нужно.
print <<<HERE
<form action="testreg.php" method="post">
<!-- testreg.php - это адрес обработчика. То есть, после нажатия на кнопку "Войти", данные из полей отправятся на страничку testreg.php методом "post"  -->
  <p>
    <label>Ваш логин:<br></label>
    <input name="login" type="text" size="15" maxlength="15"
HERE;
 
    
if (isset($_COOKIE['login'])) //есть ли переменная с логином в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его логин уже вписан в нужную графу
echo ' value="'.$_COOKIE['login'].'">';
}
 
 
print <<<HERE
  </p>
<!-- В текстовое поле (name="login" type="text") пользователь вводит свой логин -->  
  <p>
    <label>Ваш пароль:<br></label>
    <input name="password" type="password" size="15" maxlength="15"
HERE;
 
    
if (isset($_COOKIE['password']))//есть ли переменная с паролем в в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его пароль уже вписан в нужную графу
echo ' value="'.$_COOKIE['password'].'">';
}
    
print <<<HERE
  </p>
<!-- В поле для паролей (name="password" type="password") пользователь вводит свой пароль -->  
  <p>
    <input name="save" type="checkbox" value='1'> Запомнить меня.
  </p>
  <p>
    <input name="autovhod" type="checkbox" value='1'> Автоматический вход.
  </p>
 
<p>
<input type="submit" name="submit" value="Войти">
<!-- Кнопочка (type="submit") отправляет данные на страничку testreg.php  --> 
<br>
<!-- ссылка на регистрацию, ведь как-то же должны гости туда попадать  --> 
<a href="reg.php">Зарегистрироваться</a> 
 
<br>
<!-- ссылка на восстановление пароля  --> 
<a href="send_pass.php">Забыли пароль?</a> 
 
</p></form>
<br>
Вы вошли на сайт, как гость<br><a href='#'>Эта ссылка доступна только зарегистрированным пользователям</a>
HERE;
}
 
else
{
//при удачном входе пользователю выдается все, что расположено ниже между звездочками.
//************************************************************************************
 
 
print <<<HERE
|<a href='page.php?id=$_SESSION[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>
 
<!-- Между оператором  "print <<<HERE" выводится html код с нужными переменными из php -->
Вы вошли на сайт, как $_SESSION[login]<br>
<!-- выше ссылка на выход из аккаунта -->
 
<a href='http://tvpavlovsk.sk6.ru/'>Эта ссылка доступна только зарегистрированным пользователям</a><br>
Ваш аватар:<br>
<img alt='$_SESSION[login]' src='$myrow[avatar]'>
<!-- Выше отображается аватар. Его адрес содержит переменная $myrow[avatar] -->
 
<!-- Именно здесь можно добавлять формы для отправки комментариев и прочего... -->
 
HERE;
 
 
//************************************************************************************
//при удачном входе пользователю выдается все, что расположено ВЫШЕ между звездочками.
}
 
?>
</body>
</html>
Так ошибок нет! Но если я хочу добавить какой то элемент к сайту, например верхнее меню, и добавляю его по всем правилам, то есть html код после тега body, а css в теге style, то выдается ошибка: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/zedox440/public_html/index.php:1) in /home/zedox440/public_html/blocks/header.php on line 3, вот код который я поставил:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
 
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 
 
if (isset($_COOKIE['auto']) and isset($_COOKIE['login']) and isset($_COOKIE['password']))
{//если есть необходимые переменные
    if ($_COOKIE['auto'] == 'yes') { // если пользователь желает входить автоматически, то запускаем сессии
          $_SESSION['password']=strrev(md5($_COOKIE['password']))."b3p6f"; //в куках пароль был не зашифрованный, а в сессиях обычно храним зашифрованный
          $_SESSION['login']=$_COOKIE['login'];//сессия с логином
          $_SESSION['id']=$_COOKIE['id'];//идентификатор пользователя
        }   
    }
 
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существет логин и пароль в сессиях, то проверяем их и извлекаем аватар
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db); 
$myrow = mysql_fetch_array($result);
//извлекаем нужные данные о пользователе
}
?>
<html>
<head>
<title>Главная страница</title>
<style type="text/css">
 
body
{
     font: 11px Arial, Helvetica, sans-serif;   
}
 
#menu
{
    font: 11px Arial, Helvetica, sans-serif;
    background-image:url('images/bc_bg.png'); 
    background-repeat:repeat-x;
    height:30px;
    line-height:30px;
    color:#9b9b9b;
    border:solid 1px #cacaca;
    width:100%;
    overflow:hidden;
    margin:0px;
    padding:0px;
}
#menu li 
{
    list-style-type:none;
    float:left;
    padding-left:10px;
}
#menu a
{
    height:30px;
    display:block;
    background-image:url('images/bc_separator.png'); 
    background-repeat:no-repeat; 
    background-position:right;
    padding-right: 15px;
    text-decoration: none;
    color:#454545;
}
.home
{
    border:none;
    margin: 8px 0px;
}
 
#menu a:hover
{
    color: gray;
}
 
</style>
</head>
<body>
<ul id="menu">    
 <li><a href="/" title="Главная"><img src="images/home.png" alt="Home" class="home" /></a></li>                
 <li><a href="/" title="Форум поддержки">Форум поддержки</a></li>        
 <li><a href="/" title="Блог">Блог</a></li>                
 <li><a href="/" title="Товары">Товары</a></li>                                
 <li><a href="/" title="О нас">О нас</a></li>   
  </ul> 
 
<?php
if (!isset($myrow['avatar']) or $myrow['avatar']=='') {
//проверяем, не извлечены ли данные пользователя из базы. Если нет, то он не вошел, либо пароль в сессии неверный. Выводим окно для входа. Но мы не будем его выводить для вошедших, им оно уже не нужно.
print <<<HERE
<form action="testreg.php" method="post">
<!-- testreg.php - это адрес обработчика. То есть, после нажатия на кнопку "Войти", данные из полей отправятся на страничку testreg.php методом "post"  -->
  <p>
    <label>Ваш логин:<br></label>
    <input name="login" type="text" size="15" maxlength="15"
HERE;
 
    
if (isset($_COOKIE['login'])) //есть ли переменная с логином в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его логин уже вписан в нужную графу
echo ' value="'.$_COOKIE['login'].'">';
}
 
 
print <<<HERE
  </p>
<!-- В текстовое поле (name="login" type="text") пользователь вводит свой логин -->  
  <p>
    <label>Ваш пароль:<br></label>
    <input name="password" type="password" size="15" maxlength="15"
HERE;
 
    
if (isset($_COOKIE['password']))//есть ли переменная с паролем в в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его пароль уже вписан в нужную графу
echo ' value="'.$_COOKIE['password'].'">';
}
    
print <<<HERE
  </p>
<!-- В поле для паролей (name="password" type="password") пользователь вводит свой пароль -->  
  <p>
    <input name="save" type="checkbox" value='1'> Запомнить меня.
  </p>
  <p>
    <input name="autovhod" type="checkbox" value='1'> Автоматический вход.
  </p>
 
<p>
<input type="submit" name="submit" value="Войти">
<!-- Кнопочка (type="submit") отправляет данные на страничку testreg.php  --> 
<br>
<!-- ссылка на регистрацию, ведь как-то же должны гости туда попадать  --> 
<a href="reg.php">Зарегистрироваться</a> 
 
<br>
<!-- ссылка на восстановление пароля  --> 
<a href="send_pass.php">Забыли пароль?</a> 
 
</p></form>
<br>
Вы вошли на сайт, как гость<br><a href='#'>Эта ссылка доступна только зарегистрированным пользователям</a>
HERE;
}
 
else
{
//при удачном входе пользователю выдается все, что расположено ниже между звездочками.
//************************************************************************************
 
 
print <<<HERE
|<a href='page.php?id=$_SESSION[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>
 
<!-- Между оператором  "print <<<HERE" выводится html код с нужными переменными из php -->
Вы вошли на сайт, как $_SESSION[login]<br>
<!-- выше ссылка на выход из аккаунта -->
 
<a href='http://tvpavlovsk.sk6.ru/'>Эта ссылка доступна только зарегистрированным пользователям</a><br>
Ваш аватар:<br>
<img alt='$_SESSION[login]' src='$myrow[avatar]'>
<!-- Выше отображается аватар. Его адрес содержит переменная $myrow[avatar] -->
 
<!-- Именно здесь можно добавлять формы для отправки комментариев и прочего... -->
 
HERE;
 
 
//************************************************************************************
//при удачном входе пользователю выдается все, что расположено ВЫШЕ между звездочками.
}
 
?>
</body>
</html>
Ссылка на сайт: warbrainy .ru
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 04:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка сессии при команде "session_start();" (PHP):

Ошибка при session_start()
&lt;?php session_start(); $number = addslashes(strip_tags(trim($_POST))); echo...

Ошибка "mysql_fetch_assoc() expects parameter 1 to be resource, boolean given" при создании чека
Добрый день, начал разрабатывать чек, используя библиотеку mpdf, но вот...

Обязательно ли в файле, где проверяется имя сессии, писать session_start?
приветствую! такой вопрос, если мы хотим на странице проверить сессию, вот...

Доступ к родительским директориям и файлам echo file_get_contents("./dir1/dir2/".$_REQUEST["password_md5"].".txt");
Доброго времени суток! Помогите пожалуйста пролить свет на вопрос. Есть...

Какую книгу выбрать из "PHP 5 Второе издание (авторы Котеров и Костарев)" и "Джентельменский набор WEB-мастера".
Приветствую всех. Есть две книги : PHP 5 2ое издание , Авторы Котеров и...

Как запретьть ввод в адресной строке знаков "?" и "&" ?
Подскажите пожалуйста как можно сделать так чтоб если пользователь в адресной...

2
hatsub
61 / 60 / 7
Регистрация: 25.05.2011
Сообщений: 388
08.04.2012, 20:23 #2
не по теме: sql инъекций не боитесь?

PHP
1
2
3
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
По теме: ничего
0
Alex_pac
1291 / 697 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
08.04.2012, 21:48 #3
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
ваще в сессию надо сохранять ID пользователя. так нагрузка при запросе меньше будет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2012, 21:48
Привет! Вот еще темы с решениями:

getimagesize() vs $_FILES["img"]["type"] - узнать тип изображения
Как лучше проверять тип файла? Необходимо запретить закачку любых файлов, кроме...

Ошибка "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given"
код &lt;? unset($_session); unset($_SESSION); // определяем тип учетной...

Ошибка при создании сессии на PHP
При создании сессии выдаёт такую ошибку &quot;Warning: session_start(): Cannot send...

Какой функцией строка "text1" превращается в "cab49056f98efeb4823b031eb439c233fe8a87a7"?
Собственно, сабж: какой функцией строка &quot;text1&quot; превращается в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru