kajtek2008
16.05.2011, 10:48:22
Mam 2 takie same skrypty, jak zaloguję sie do jednego, to loguje mnie też do drugiego.
Jak to rozwiązać ?
olechafm
16.05.2011, 11:05:12
być może używasz do ich sprawdzania identycznego identyfikatora np. tak samo nazywającej się zmiennej w tablicy sesji...
pokaż kod
tsdek
16.05.2011, 12:36:42
Logowanie:
<?php
include_once 'inc.php';
?>
<form action='login.php' method='post'>
Nazwa Użytkownika: <input type='text' name='username'/></br>
Hasło: <input type='password' name='pass'></br>
<input type='submit' value='Login'/><br>
</form>
<?php
if (empty($_POST['username']) || empty($_POST['pass'])) echo 'Wypełnij wszystkie pola!'; else
{
$username = vtxt($_POST['username']);
$password = vtxt($_POST['pass']);
$password = md5($password); if (!ctype_alnum($username)) echo 'To nie jest poprawna nazwa użytkownika'; else
{
$row = row("SELECT id FROM user WHERE username='$username' AND password='$password'");
if ( $row )
{
echo 'Gratulacje, zalogowano!'; $_SESSION['id'] = $row['id'];
} else echo 'Podałeś niepoprawne dane!'; }
}
?>
Rejestracja:
<?php
include_once 'inc.php';
?>
<form action='register.php' method='post'>
Nazwa Użytkownika: <input type='text' name='username'/><br>
Password: <input type='password' name='pass'></br>
Mail: <input type='text' name='mail'/><br>
<input type='submit' value='Rejestruj!'/><br>
</form>
<?php
if (empty($_POST['username']) || empty($_POST['pass']) || empty($_POST['mail'])) echo 'Wypełnij wszystkie pola!'; else
{
$username = vtxt($_POST['username']);
$password = vtxt($_POST['pass']);
$mail = vtxt($_POST['mail']);
if (! ctype_alnum($username) ) echo 'To nie jest poprawna nazwa użytkownika!'; else if (! filter_var
($mail,FILTER_VALIDATE_EMAIL
) ) echo 'To nie jest poprawny email!'; else
{
if ( row
("SELECT id FROM user WHERE username='$username' OR email='$mail'") ) echo 'Nazwa użytkownika/mail jest już zajęta'; else
{
$password = md5($password); mysql_query("INSERT into user (username,password,email) VALUES ('$username','$password','$mail')"); echo 'Konto zostało założone!'; }
}
}
?>
inc.php to plik w którym znajduje się połączenia z bazą danych mysql
ActivePlayer
16.05.2011, 13:22:01
na początku każdego skryptu umiesc wywołanie funkcji session_name, przy czym nadaj różne nazwy sesji dla każdego z formularzy. dodatkowo na wszystkich podstronach gdzie sprawdzasz logowanie też będziesz musiał wywołać session_name, w zaleznosci od tego, którego formularza dotyczy dana sesja
kajtek2008
16.05.2011, 14:32:58
<?php
include "config.php";
require "../../include/connection.php";
connection();
if($_SESSION['zalogowany']) {
echo 'Już jestes zalogowany! <meta http-equiv="refresh" content="0; url=index.php">
';
}
else
{
echo '<form action="login.php" method="POST"> Nick: <br /><input type="text" name="login"><br />
Hasło: <br /><input type="password" name="password"><br />
<input type="submit" name="ok" value="Zaloguj">
</form>';
{
$nick = $_POST['login'];
$pass = $_POST['password'];
else
{
$result = mysql_query("SELECT * FROM admin WHERE login='$nick' AND password='$pass'");
else
{
$_SESSION['zalogowany'] = true;
$_SESSION['id'] = $row['id'];
$_SESSION['login'] = $row['login'];
echo 'Zostałes poprawnie zalogowany! Możesz teraz przejsć na <a href="admin.php">stronę główna</a> <meta http-equiv="refresh" content="4; url=admin.php">'; }
}
}
}
?>
olechafm
16.05.2011, 16:53:44
napisałeś, że masz dwa skrypty, które są autoryzowane po zalogowaniu do któregokolwiek z nich, to gdzie jest ten drugi?
ale stawiam, że problem dotyczy używania tej samej zmiennej sesyjnej patrz linijka 8:
if($_SESSION['zalogowany'])
jeśli w drugim skrypcie jest ta sama zmienna odpowiadająca za ustawienie statusu zalogowania, to tu tkwi problem, gdy logujesz się do jednego skryptu, ustawiasz zmienną sesyjną $_SESSION['zalogowany'], drugi skrypt również z niej korzysta i skoro jest ustawiona na true, to on działa poprawnie, gdyż ta zmienna pozostaje w jego zasięgu i on ją widzi jako true
w drugim skrypcie możesz po prostu użyć innej nazwy, wpisz np $_SESSION['zalogowany2'] i już zobaczysz, że działa inaczej, oczywiście wszędzie gdzie dany skrypt jej używa
kajtek2008
16.05.2011, 17:12:07
session_name("code");
Pomogło.
Mam 1 skrypt w 2 folderach.
Chodziło mi o to, ze jeśli zaloguje się na
mojastrona/strona1.php
to logowało mnie też na
mojastrona/strona2.php