Passwortschutz (SESSION oder Cookies)

WhiteShadow

Mitglied
Hallo

Ich möchte eine Seite "seite1.php" mit einem Passwortschutz ausstatten der dann in einem Session oder Cookie gespeichert wird für eine bestimmte Zeit bzw. bis die Seite geschloßen wird.
Dieser Schutz sollte so gehen:

Die URL wird Abgefragt und das "seite1.php" mit in der MySql eingetragenem namen also "seite1.php" verglichen.

Sollte beide zusammenpassen dann wird zum "seite1.php" das dazugehörige "password" verglichen.

Dieses Passwort wird vom Gast in ein "inputfeld" eingetragen und durch "submit" wird die gleiche Seite wieder aufgerufen.

Da das eingetragene Passwort und der Seitenname in einem cookie oder session gespeichert werden, so werden sie beim seitenaufbau durch ein "if" script abgefragt ob die vorhanden sind, wenn ja wird die Seite angezeigt wenn nicht (durch ablauf des Cookies oder Seite wird geschloßen und neu geöffnet) dann wird wieder das "inputfeld" angezeigt und man muss das zur Seite dazugehörige Password eingeben.

So leider versuche ich das die ganze Zeit aber ich kenn mich mit cookies oder sessions nicht so gut aus und somit klappt das einfach nicht.
Es wäre somit furchbar nett wenn mir jemand diesen Code in etwa machen könnte.

Mit freundlichen Grüßen
WhiteShadow
 
Sorry, aber wo hängts denn genau bei dir?

In PHP ist das alles recht einfach zu machen.

Code:
session_start();

startet dir den Zugriff auf eine Session und mit

Code:
$_SESSION['foo']

greifst du auf eine Variable zu, die in der Session gespeichert wurde.
 
So hab jetztmal n kleinen Mischmasch gemacht.

PHP:
if(!$_COOKIE['Geklickt']){

$username = $_POST['username'];
$password_site = $_POST['password_site'];
$user = mysql_query("SELECT * FROM site_users WHERE username='$username' AND password_site='$password_site'");
if(mysql_num_rows($user) != 1) {
echo "

<h2>Passwordabfrage</h2>
Test Password
<br><br>
<table cellpadding='0' cellspacing='0'>
<form action='#' name='login' method='POST'>
<tr>
<td><font class='bold'>Username</font><br>
<input type='text' class='text' name='username' maxlength='30' value='$username'>&nbsp;
</td>
<td><font class='bold'>Password</font><br>
<input type='password' class='text' name='password_site' maxlength='30'  value='$password_site'>&nbsp;
</td>
<td valign='bottom'>
<input type='submit' class='sbutton' value='KLICK' style='margin-bottom: 3px;'>
</td>
</tr></table>
</form>

</script>
";

  }
  else
  {
    setcookie("Geklickt", "Hatta!",time()+10);
    $Server1 = $_SERVER['SERVER_NAME'];
    $URL1 = $_SERVER['REQUEST_URI'];
    $HTTP1 = "http://$Server1$URL1";
   
    echo("<html>\n".
         "  <head>\n".
         "    <meta http-equiv='refresh' content='1; url='$HTTP1'>\n".
         "    <title>Gedulde dich :(</title>\n".
         "  </head>\n".
         "  <body>\n".
         "    <center><h1>Sie werden automatisch weitergeleitet! ...</h1></center>\n".
         "<center><a href='$HTTP1'>Manuelle Weiterleitung, hier klicken.</a></center>\n".
         "  </body>\n".
         "</html>");
  }
  die();
}

echo("Hier k&auml;me nun die Seite :)");

Und es geht weiß aber net ob es kürzer oder anders geht(Username wird noch durch die url ersetzt die dann in der mysql gespeichert ist)

EDIT:

Noch ne Frage nebenbei wie kann man 3 Sachen miteinander vergleichen
zb:
PHP:
$user = mysql_query("SELECT * FROM site_users WHERE username='$username' AND password_site='$password_site' SELECT * FROM site_site WHERE siteurl='$siteurl'");
irgenwie so ^^
also das der statt username und password miteinander vergleich das der aus der einen datenbank "site_site" die siteurl mit der password aus "site_users" abgleicht wenn die zusammen passen dann weiter.
Ich weiß etwas kompliziert aber wollts einfach so haben weiß aber net ob das so geht




MFG
WhiteShadow
 
Zuletzt bearbeitet:
Sorry, vll. ist es für mich heute schon zu spät, aber ich peile nicht wirklich die Logik, die hinter deinem Code steht. Für mich ist irgendwie alles bunt gemixt und ohne Sinn. Aber auf den ersten Blick hast du schonmal eine SQL Injection drin.

Außerdem ist diese Zeile hier ganz cool:

Code:
setcookie("Geklickt", "Hatta!",time()+10);

Damit ist dein Cookie genau 10 Sekunden lang gültig, gemessen ab der Erstellungszeit auf dem Server und mit der Server eigenen Uhrzeit.
 
Jo die 10 Sec waren zum Testen drin ob der cookie geht ^^.


Was mich beschäftigt ist wie kann man zb
Tabelle "site_users" feld "Password"
mit Tabelle "site_site" feld "url"

mit einander verbinden.
Also Password1 passt zu URL1 und wenn URL1 zu Password1 passt dann gehs auf der Seite weiter wenn Password2 bei URL1 eingegeben wird dann ists falsch und man muss das richtige Password eingeben.
Es ist wie Username und Password aber ich hab die auf 2 Tabellen getrennt. Kenn mich da net so aus :( .

MFG
WhiteShadow
 
Wenns geht ist es doch gut, aber du solltest mal das Thema SQL Injection überfliegen, bei Wikipedia gibt es da z.B. was: KLICK

Aus deinem SQL String am Ende werd ich nicht 100%ig schlau :) aber wenn du mehrere Tabellen abfragen möchtest, musst du mit JOIN arbeiten.

So in etwa (ungetestet):
Code:
SELECT *
FROM site_users su
JOIN site_site ss
ON (su.id = ss.id)

WHERE
(su.username='$username' AND su.password_site='$password_site')
OR
(su.password_site='$password_site' AND ss.siteurl='$siteurl')

edit: hab ich wirklich so lange zum tippen gebraucht :D
 
hm irgenwie geht das nicht.

hab es mal so umgeändert aber das geht auch nicht


mfg
whiteshadow
 
Zuletzt bearbeitet:
PHP:
$user = mysql_query("
SELECT site_users.password_site, site_site.url 
FROM site_users su 
LEFT JOIN site_site ss 
ON (su.id = ss.id)
WHERE  (su.password_site='$password_site' AND ss.url ='$url'");
aber der blickt das net

im site_user unter password_site steht drin
1 12345
2 23456
...

und unter site_site bei url
1 site1.php
2 site2.php
3 site3.php
...

1. so nun soll der das password 1 nur für seite1 erlauben und password2 für seite2

2. aber auch password1 für site3 gehen aber password2 für site3 nicht erlaubt werden.
(der zweite teil brauchst sicher noch was aber der erste sollte wenigstens gehen)

aber da geht was nicht :(

EDIT: mit LEFT gehts auch nicht

mfg
whiteshadow
 
Zurück