• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Cookie setzen

Status
Für weitere Antworten geschlossen.

Anonymous

Neues Mitglied
Hallo,

wie setzt man einen Cookie und wie bestimmt man, was der Cookie "macht", etc.?

Über hilfreiche Antworten würde ich mich sehr freuen.
 
Werbung:
Ich habe ein Login-Script (siehe: http://ltm.lm.funpic.de/php/login.html). In der Datei seite.php wird überprüft, ob der Besucher eingeloggt ist, oder nicht, in dem überprüft wird, ob die Variable Benutzername in der Session registriert wurde (Die Variable wird beim Login (login.php) registriert).

Nun brauche ich einen Cookie, der, wenn er beim Login aktiviert wird, irgendwie eine Session startet und eine Variable darin registriert, ohne, dass man sich extra einloggen muss.

Oder beziehungsweise, ich brauche einen Cookie, der die login.php automatisch ausführt.

Verstanden?
 
Werbung:
Eigentlich mache ich es so:
Code:
if(session_is_registered("Benutzername"))
{
echo "Eingeloggt(...)";
}
(...)

Ich versteh nicht so ganz, wie ich das mit dem Cookie nun machen soll.

So sieht mein Login-script aus:

login.html:
Code:
<h3>Login</h3>
<form action="login.php" method="POST">
Benutzername:

<input type="text" name="Benutzername">


Passwort:

<input type="password" name="Passwort">


<input type="submit" value="Absenden">
</form>


[url="registrieren.html"]Registrieren[/url] [url="statistik.php"]Statistik[/url]

login.php:
Code:
<?php
    session_start();
	
    include('datenbank.php');
	
    $Benutzername = $_POST['Benutzername'];
    $Passwort = $_POST['Passwort'];
	$Passwort = md5($Passwort);

    $sql = "SELECT * FROM `Userdaten` WHERE `Benutzername` = '$Benutzername' AND `Passwort` = '$Passwort' LIMIT 1";

    $res = mysql_query($sql);

    if($Benutzername != "" and $Passwort != "")
	{
    	if(mysql_num_rows($res) > 0)
    	{
			session_register("Benutzername");
			echo "Hallo $Benutzername! Herzlich Willkommen im Mitglieder-bereich. <a href=\"seite.php\">Weiter</a>";
    	}
    	else
    	{
        	echo "Die Angaben sind leider falsch.";
        	echo "
";
        	echo "<a href=\"login.html\">Zurück</a> <a href=\"registrieren.html\">Registrieren</a>";
    	}
	}
	else
	{
	    echo "Bitte tragen Sie Ihren Benutzername und Ihr Passwort ein.";
		echo "
";
		echo "<a href=\"login.html\">Zurück</a>";
	}
?>

registrieren.html:
Code:
<h3>Registrieren</h3>
<form action="registrieren.php" method="POST">
Benutzername:

<input type="text" name="Benutzername">


Passwort:

<input type="password" name="Passwort">


Passwort (wiederholen):

<input type="password" name="Passwort2">


<input type="submit" value="Absenden">
</form>

registrieren.php:
Code:
<?php
    include('datenbank.php');
	

    $Benutzername = $_POST['Benutzername'];
	$Passwort = $_POST['Passwort'];
	$Passwort2 = $_POST['Passwort2'];
	
	$sql = "SELECT * FROM `Userdaten` WHERE `Benutzername` = '$Benutzername' LIMIT 1";
	
	if($Benutzername != "" and $Passwort != "" and $Passwort2 != "")
	{
		if($Passwort == $Passwort2)
		{
	    	$res = mysql_query($sql);
			if(mysql_num_rows($res) < 1)
			{
			    $Passwort = md5($Passwort);
		    	$sql = "INSERT INTO `Userdaten` (`Benutzername`, `Passwort`) VALUES ('$Benutzername', '$Passwort')";
				mysql_query($sql);
				echo "Sie haben sich erfolgreich angemeldet.";
				echo "
";
				echo "Sie können sich nun <a href=\"login.html\">einloggen</a>.";
			}
		    else
		    {
	    	echo "Der Benutzername existiert bereits.";
			echo "
";
			echo "<a href=\"registrieren.html\">Zurück</a>";
		    }
		}
		else
		{
		    echo "Die Passwörter sind nicht identisch.";
			echo "
";
			echo "<a href=\"registrieren.html\">Zurück</a>";
		}
	}
	else
	{
	    echo "Bitte tragen Sie Ihren Benutzername und Ihr Passwort ein.";
		echo "
";
		echo "<a href=\"registrieren.html\">Registrieren</a>";
	}
?>

datenbank.php:
Code:
<?php
    $mysql_user = "ltm";
    $mysql_pw = "**********";
    $mysql_host = "localhost";
    $mysql_db = "ltm";

    mysql_connect($mysql_host, $mysql_user, $mysql_pw);
    mysql_select_db($mysql_db);
?>

seite.php:
Code:
<?php
    session_start();
	
	if(session_is_registered("Benutzername"))
	{
	    echo "Eingeloggt als $Benutzername [<a href=\"logout.php\">Ausloggen</a>]";
		echo "

";
		include('umfrage.html');		
	}
	else
	{
	    echo "Nicht eingeloggt [<a href=\"login.html\">Einloggen</a>]";
		echo "

";
		include('umfrage_ergebniss.php');
	}
?>

Ich habe voreshalber mal alles gepostet, damit es keine Missverständnisse gibt..

Wie bau ich hier nun einen Cookie ein?
 
es ist ganz einfach...
irgendwo speicherst du die variable in der session...
---> genau dort erstellst du einen cookie
mehrmals fragst du die session nach der variable ab
---> genau dort suchst du nach einem cookie mit diesem inhalt
fals du irgendwo noch die session löschst
---> genau dort kasst du auch den cookie wieder löschen...
 
Werbung:
Okay, also da wo ich die Variable in der Session registriere, setzte ich auch einen Cookie und registriere die Variable im Cookie.

Das registrieren einer Variable in einem Cookie, muss ich das mit
Code:
cookie_register("Benutzername");
machen, oder wie?

Und beim Abfragen der Session muss ich das mit Cookie dann so machen?:
Code:
if(isset($_SESSION["Benutzername"]) or isset($_COOKIE["Benutzername"]))

[edit]
Ich hab es jetzt so versucht, es funktioniert aber nicht (http://ltm.lm.funpic.de/php/login.html):

login.html:
Code:
<h3>Login</h3>
<form action="login.php" method="POST">
Benutzername:

<input type="text" name="Benutzername">


Passwort:

<input type="password" name="Passwort">


<input type="checkbox" name="Cookie"> Cookie benutzen


<input type="submit" value="Absenden">
</form>


[url="registrieren.html"]Registrieren[/url] [url="statistik.php"]Statistik[/url]

login.php:
Code:
<?php
    session_start();
	
    include('datenbank.php');
	
    $Benutzername = $_POST['Benutzername'];
    $Passwort = $_POST['Passwort'];

	$Passwort = md5($Passwort);
	$Cookie = $_POST['Cookie'];

    $sql = "SELECT * FROM `Userdaten` WHERE `Benutzername` = '$Benutzername' AND `Passwort` = '$Passwort' LIMIT 1";

    $res = mysql_query($sql);

    if($Benutzername != "" and $Passwort != "")
	{
    	if(mysql_num_rows($res) > 0)
    	{
		    if($Cookie == "on")
			{
			    $cookievalue = "http://ltm.lm.funpic.de/php/login.html";
			    setcookie("Cookie", $Benutzername, time() + 180, "/", "ltm.lm.funpic.de", 1);
			}
			session_register("Benutzername");
			echo "Hallo $Benutzername! Herzlich Willkommen im Mitglieder-bereich. <a href=\"seite.php\">Weiter</a>";
    	}
    	else
    	{
        	echo "Die Angaben sind leider falsch.";
        	echo "
";
        	echo "<a href=\"login.html\">Zurück</a> <a href=\"registrieren.html\">Registrieren</a>";
    	}
	}
	else
	{
	    echo "Bitte tragen Sie Ihren Benutzername und Ihr Passwort ein.";
		echo "
";
		echo "<a href=\"login.html\">Zurück</a>";
	}
?>

seite.php:
Code:
<?php
    session_start();
	
	if(isset($_SESSION['Benutzername']) or isset($_COOKIE['Cookie']))
	{
	    echo "Eingeloggt als $Benutzername [<a href=\"logout.php\">Ausloggen</a>]";
		echo "

";
		include('umfrage.html');		
	}
	else
	{
	    echo "Nicht eingeloggt [<a href=\"login.html\">Einloggen</a>]";
		echo "

";
		include('umfrage_ergebniss.php');
	}
?>

Wieso funktioniert das nicht?
[/edit]
 
http://php.benscom.com/manual/de/function.setcookie.php schrieb:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]] )
erstellt cookie für 1h (3600 sec) mit namen TestCookie mit inhalt TestInh:
[php:1:0fa5b8edbd]<?php
setcookie ("TestCookie", "TestInh", time()+3600);
?>[/php:1:0fa5b8edbd]
löscht cookie mit namen TestCookie, da ziet in der vergangenheit liegt:
[php:1:0fa5b8edbd]<?php
setcookie ("TestCookie", "", time() - 3600);
?>[/php:1:0fa5b8edbd]
fragt nach, ob TestCookie existiert:
[php:1:0fa5b8edbd]<?php
if (isset($_COOKIE['TestCookie'])) { }
?>[/php:1:0fa5b8edbd]
fragt einen inh in TestCookie ab:
[php:1:0fa5b8edbd]<?php
if ($_COOKIE['TestCookie'] == "blabla") { }
?>[/php:1:0fa5b8edbd]

mfg, fätzminator
 
Aber das hab' ich doch gemacht und trotzdem funktioniert es nicht.

- Wenn der Benutzer "Cookie benutzern" aktiviert, wird ein Cookie gesetzt, welcher "Cookie" heisst und den Inhalt "$Benutzername" (also die Eingabe) enthält.
- In seite.php wird gefragt, ob entweder eine Session mit der Variable "Benutzername" existiert, oder ein Cookie namens "Cookie" existiert. Wenn ja, wird "Eingeloggt(...)" ausgegeben.

Das funktioniert aber nicht, ich kann nur keinen Fehler entdecken.

Cookie gestartet mit:
Code:
setcookie("Cookie", $Benutzername, time() + 180, "/", "ltm.lm.funpic.de", 1);

Cookie abgefragt mit:
Code:
if(isset($_COOKIE['Cookie']));

[edit]
Ich hab ein bißchen rumprobiert, nun funktioniert es.

Jetzt habe ich aber noch eine Frage:
Muss ich jeden Cookie wieder löschen? Oder löscht der sich nach Ablauf der Zeit selbst?
[/edit]
 
Werbung:
ja er löscht sich selbst...
das mit dem löschen war nur, da sich der benutzer ja (siehe dieses forum) auch wieder ausloggen kann...
 
Werbung:
1. Cookies kann man auch ganz einfach selber setzen - das heist deine benutzer koennen sich dann als belibieger anderer benutzer selbst einloggen ohne ein passwort einzugeben wenn man nur den benutzernamen etc speichert.
am besten waere es vieleicht bei jedem login eine zufallszahl zu erstellen, diese in die datenbank einzutragen und als cookie beim benutzer zu speichern
dann einfach bei login.php ueberpruefen ob deer cookie existiert . und die datenbank nach der zufallszahl abfragen um den benutzernamen zu erfahren ;)
2. benutze NIEMALS session_register oder session_is_registered - nimm immer die SuperGLobale $_SESSION
(z.b.)
[php:1:fde2dda85f]
<?php
session_start();
$_SESSION['benutzername'] == 'alfred';
?>
[/php:1:fde2dda85f]
um sie dann abzufragen benutzt du einfach
[php:1:fde2dda85f]
<?php
session_start();
if(true === arra_key_exists('benutzername', $_SESSION))
{
// *benutzer eingeloggt*
}
else
{
//*benutzer nicht eingeloggt*
}
?>
[/php:1:fde2dda85f]
 
Wieso nicht session_register und session_is_registered?

Wenn man die nicht benutzen soll, wieso wurden die dann überhaupt erfunden?
 
gibt es so viel ich weiss gar nicht mehr in php 5.0.5...
1. Cookies kann man auch ganz einfach selber setzen - das heist deine benutzer koennen sich dann als belibieger anderer benutzer selbst einloggen ohne ein passwort einzugeben wenn man nur den benutzernamen etc speichert.
stimmt gar nicht... du meinst dass er auf seiner website ein cookie macht was für meine site gehen soll?
cookies gehen nur siteintern... dh wenn sie für www.html.de sein soll muss sie auch von dort geschrieben sein
 
Werbung:
stimmt nicht.
man kann angeben fuer welche seite sie gelten sollen .. (blockieren aber einige browser)
es ging aber darum das du dir ganz einfach selber cookies machen kannst mit belibigen inhalt
da sie in einer datei auf deinem pc gespeichrt werden.
also machst du dir einfach selbst einen cookie mit benutzername= "admin" oder aehnlichem und schon waerest du eingeloggt ;)
zu session register guckst du einfach mal selbst auf php.net - da sind ja schon 3 grosse warnungs boxen warum man es nicht verwenden sollte ;)
 
damit waere die ganze sicherheit durch den md5 hash den bach runter -schlechte idee.

wenn einem angreifer die md5 hashs aus der db in die finger fallen (sowas passiert sehr viel schneller als man denkt) kann er sich einfach so einloggen - sicherheit ade.
dafuer ist ja das pw speichern als md5 da - selbst wenn man die ganze datenbank kopiert kann man sich immernoch nicht einloggen da man kein passwort hat.

wenn solche auto login key (wie sie auch dieses forum hier benutzt ;) )
in der db gespeichert werden die immer nach einem login neu generiert werden kann sich der angreifer A. nur mit accounts einloggen die das feature auto login angeschaltet haben und B. das auch nur ein einziges mal.
;)
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben