Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
Nebiros
33 / 33 / 16
Регистрация: 23.03.2010
Сообщений: 2,023
1

сессии

17.10.2010, 20:38. Просмотров 1407. Ответов 8
Метки нет (Все метки)

интересует правильная постановка сессий на сайте , вот у меня такой тип -

PHP
1
2
3
session_start();
$login=$SESSION['login'];
$pass=$SESSION['pass];
ну дальше код с проверкой если логин или пароли не совпадают с базой либо пусты то высвечивается форма входа , если все нормально то высвечивается что то типа прет пользователь.
Интересует правильно ли будет делать такую конструкцию , в чем у нее могут быть минусы?
Да и как сделать если на другом компьютере зайдут с одинаковым логином чтобы тут как бы выкидывало с аккаунта ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2010, 20:38
Ответы с готовыми решениями:

Сессии
При session_start() выводит предупреждение... Что не так делаю? session_start() стоит в...

Сессии
Привет Народ. Человек перешел на http://site.ru/cp и вошел под своим логином и паролем. Как...

Сессии
Нужно использовать сессии в упрощённом смысле примерно так: <?php session_start(); if...

Сессии
Доброго времени суток! Народ что тут не так? Впервые сегодня столкнулся с сессиями,почитал...

Сессии
пример <?php ## Простой пример использования сессий без Cookies. session_name("test");...

8
Xander Bass
Йошь-мыслитель
122 / 116 / 25
Регистрация: 22.02.2009
Сообщений: 681
Записей в блоге: 5
17.10.2010, 20:48 2
Во-первых, логин с паролем лучше сохранять в куках. Так проще и удобнее в плане того, чтобы можно было заходить на аккаунт с нескольких компов. Во-вторых, лучше проверку делать так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
session_start();
if (isset($_SESSION['login']))
{
 if ($_SESSION['login'] != '')
 {
  $login = addslashes(htmlspecialchars($_SESSION['login']));
 }
}
if (isset($_SESSION['pass']))
{
 if ($_SESSION['pass'] != '')
 {
  $pass = addslashes(htmlspecialchars($_SESSION['pass']));
 }
}
 
// далее проверка по БД и дальнейшие действия
Ибо:

1. Нужно экранировать спецсимволы, так, на всякий случай.
2. Нужно предусматривать ввод скриптов
1
romchiksoad
1951 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,067
Записей в блоге: 2
17.10.2010, 21:02 3
Xander_Bass, во-первых, логин, а тем более пароль, не нужно хранить в куках. В куках можно хранить идентификатор авторизации. А это может быть всё, что угодно.
А если в Ваш код передадут не верные логин и пароль? Что тогда? Очищать сессию? Я считаю это лишним. Лучше сначала проверить в БД, а потом записывать в сессии.
1
Nebiros
33 / 33 / 16
Регистрация: 23.03.2010
Сообщений: 2,023
17.10.2010, 21:12  [ТС] 4
Цитата Сообщение от romchiksoad Посмотреть сообщение
Xander_Bass, во-первых, логин, а тем более пароль, не нужно хранить в куках. В куках можно хранить идентификатор авторизации. А это может быть всё, что угодно.
А если в Ваш код передадут не верные логин и пароль? Что тогда? Очищать сессию? Я считаю это лишним. Лучше сначала проверить в БД, а потом записывать в сессии.
тоесть мой вариант нормальный без всяких минусов, или еще нужно чтото подправить?
0
17.10.2010, 21:12
romchiksoad
1951 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,067
Записей в блоге: 2
17.10.2010, 21:30 5
Nebiros, в коде, который Вы скинули на форум, я бы изменил почти всё. К примеру, я бы не записывал пароль в сессии. Это лишнее. Вы же не собираетесь его каждый раз сравнивать со значением в БД? По поводу логина, я бы его тоже не записывал, если Вы нигде не собираетесь его использовать. Лучше хранить id из таблицы БД.
0
Nebiros
33 / 33 / 16
Регистрация: 23.03.2010
Сообщений: 2,023
17.10.2010, 22:31  [ТС] 6
Цитата Сообщение от romchiksoad Посмотреть сообщение
Nebiros, в коде, который Вы скинули на форум, я бы изменил почти всё. К примеру, я бы не записывал пароль в сессии. Это лишнее. Вы же не собираетесь его каждый раз сравнивать со значением в БД? По поводу логина, я бы его тоже не записывал, если Вы нигде не собираетесь его использовать. Лучше хранить id из таблицы БД.
а вы бы немогиб показать пример(так сказать стандарт) по какой схеме это делается ?
нехочется просто придумывать велосипед
0
Sonax
349 / 75 / 9
Регистрация: 13.10.2010
Сообщений: 829
19.10.2010, 02:08 7
Во-первых, я использую этот код, для того, что бы не было успешных попыток mysql иньекций.
PHP
1
2
foreach($_GET as $k=>$v)$_GET[$k]=mysql_real_escape_string($v);
foreach($_POST as $k=>$v)$_POST[$k]=mysql_real_escape_string($v);
Во-вторых, пароль вообще лучше никуда не вводить и держать в md5 кэше в базе. $_SESSION[password] нужно убирать.

В-третьих,
нужно на самом верху прописать

PHP
1
2
session_name("SID");
@session_start();
0
Nebiros
33 / 33 / 16
Регистрация: 23.03.2010
Сообщений: 2,023
19.10.2010, 13:06  [ТС] 8
вот написал немного по другому код
PHP
1
2
3
4
5
6
7
8
9
10
<?php
session_start(); $login=''; $pass=''; 
$login=$_SESSION['login']; $pass=$_SESSION['pass'];
include "db.php";
$stat=0;
$q="SELECT*FROM user WHERE login='".mysql_real_escape_string($_SESSION['login'])."' AND pass='".mysql_real_escape_string($_SESSION['pass'])."'"; 
$r=mysql_query($q); 
$row=mysql_fetch_array($r); 
$status=$row['status'];
?>
думаю так уже не сломают , да и с базы всего 1 переменная берется(большой нагрузки нету) , ну а по переменной уже направляется , если $status=='' значит человек не зарегистрирован , а если к примеру $status==1 значит зарегистрирован , если равно 2 то например администратор (чтобы можно было править еще сообщения).


Цитата Сообщение от Sonax Посмотреть сообщение
session_name("SID"); @session_start();
а вот это для чего?

Добавлено через 4 минуты
Цитата Сообщение от romchiksoad Посмотреть сообщение
Nebiros, в коде, который Вы скинули на форум, я бы изменил почти всё. К примеру, я бы не записывал пароль в сессии. Это лишнее. Вы же не собираетесь его каждый раз сравнивать со значением в БД? По поводу логина, я бы его тоже не записывал, если Вы нигде не собираетесь его использовать. Лучше хранить id из таблицы БД.
логин как раз используется , к примеру за месть панели входа будет написано - привет $login! . а сравнение пароля с логином я считал лучший вариант проверки...
0
Sonax
349 / 75 / 9
Регистрация: 13.10.2010
Сообщений: 829
19.10.2010, 13:18 9
Цитата Сообщение от Nebiros Посмотреть сообщение
Сообщение от Sonax
session_name("SID"); @session_start();
а вот это для чего?
засобачивание-что бы на денвере небыло ошибки

session_name

(PHP 4, PHP 5)

session_name - получает и/или устанавливает имя текущей сессии.

Описание

string session_name ([string name])

session_name() возвращает имя текущей сессии. Если name специфицирован, имя текущей сессии изменяется на это значение.

Имя сессии ссылается на session id в куках и URL. Оно должно содержать только алфавитно-числовые символы; оно должно быть коротким и описательным (например, для пользователей с включёнными предупреждениями о куках). Имя сессии восстанавливается в значение по умолчанию, хранимое в session.name во время начала запроса. Таким образом, вам необходимо вызывать session_name() для каждого запроса (и до session_start() или session_register()).

Пример 1. session_name()

<?php

// установить имя сессии WebsiteID

$previous_name = session_name("WebsiteID");

echo "The previous session name was $previous_name<p>";
?>
0
19.10.2010, 13:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2010, 13:18

Сессии
Необходима помощь,постоянно вылазят варнинги: Warning: session_start() : Cannot send session...

Сессии
1.php &lt;?php session_start(); session_register(&quot;sess_var&quot;); $sess_var = &quot;Hello world!&quot;; ...

Сессии
Приветствую всех. Подскажите можно ли как то сделать что бы сессия удалялась через каждые 24...


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

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

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