Mi lehet a probléma és annak a megoldása?
Sziasztok! Egy programot írok php-ben és egy elég abszurd de annál nagyobb problémába ütköztem. Először is felvázolnám a gondolatmenetemet. Egy olyan oldalt szeretnék megvalósítani ahol: Az (index) oldalon van egy input amin beírok egy kódot. Ez felmegy php-ben és ellenőrzi annak helyeségét. Ha a kód stimmel akkor átírányatana egy másik oldalra. Na ezt nem is lenne olyan nehéz a probléma itt azzal van, hogy ezt munkamenetfüggvénnyel szeretném megvalosítani. Az (index) oldalon létrehozok egy "a" nevű session-t. A másik oldalon azt szeretném ellenőrizni, hogy ez az "a" nevű sessionek az értéke 1 vagy 0. Ha 0 akkor valószinüleg a link ismerete miatt lépett be és nem írta be a kódot -> ilyenkor die(); de ha 1 akkor beírta a helyes kódot mert az (index) oldalon 1-re állítom az értéket ha jó. A probléma: Ha a már leírtakat kivitelezni probálom nem lehet mert a session-t csak akkor ismeri fel ha én nyítom meg a linket. Ha php-ből írányítok át egy curl_init-el nem jelz, hogy ismerni a session-t. Probáltammár sima href-el, js-el de sehogy nem jött össze. Headerel meg nem lehet ügye mert a session_start-nál már elküldi azt. A kód:
1.Oldal
<?php
session_start();
$_SESSION["a"] = "0";
?>
<html>
<head>
<meta charset="UTF-8">
<title>Try 1.Oldal</title>
</head>
<body>
<?php
if (isset($_POST["submit"])) {
$code = $_POST["password"];
if ($code == "asd123") {
$_SESSION["a"] = "1";
$ch = curl_init(" [link]
curl_exec($ch);
die;
}else {
$_SESSION["a"] = "0";
echo "Hibás kód!";
}}
?>
<form method="post">
<input type="password" name="password" placeholder="Kód"></input>
<input type="submit" name="submit" value="Belépés"></input>
</form>
</body>
</html>
2. Oldal
<?php
session_start();
?>
<html>
<head>
<meta charset="UTF-8">
<title>Try 2.Oldal</title>
</head>
<body>
Tiskod szöveg: Obama az nagy arc. <?php echo $_SESSION["a"]; ?> <!-- Ha kiakarom íratni csak akkor ír értéket ha saját kezüleg nyítom az oldalt, egyéb esetben nem. --->
</body>
</html>
Az oldal struktúrája: Mint a 2 page a gyökérben van. Előre is köszönöm a segítségeket és a megoldásokat. :)
1. a curl nem irányít át másik oldalra, csak az adott oldal adatát kéri le.
2. a session_start nem küldi el a headert, az küldi el a headert, hogy írsz a kimenetre (<html>...)
A megoldás: az 1. oldal eredménycsekk részét tedd át a session létrehozás után, a <html> elé, és hagyd a Curl-t, az nem erre való. A header location menni fog. Csak a szöveges üzeneteket kell a bodyban elhelyezni, a validálás mindig a header meghívása előtt menjen le.
Emellett célszerű a változóknak beszédes nevet adni, és a feltételeket összevonni, ha lehetséges.
<?php
session_start();
if (!isset($_SESSION["access"])) {
$_SESSION["access"] = false;
}
$message = "";
if (isset($_POST["submit"]) && isset($_POST["password"]) && $_POST["password"] == "asd123") {
$_SESSION["access"] = true;
} else {
$message = "Hibás kód!";
}
if ($_SESSION["access"]) {
header('location: 2oldal.php');
}
?>
<html>
<head>
<meta charset="UTF-8">
<title>Try 1.Oldal</title>
</head>
<body>
<?php echo $message; ?>
...
2. oldal:
<?php
session_start();
if (!isset($_SESSION["access"]) || !$_SESSION["access"] ) {
header('location: 1oldal.php');
}
?>
<html>
...
Amint látod célszerű a második oldalban is ellenőrizni, hogy létezik-e és helyes-e a session, különben direkt címzéssel a jelszó ellenére elérik.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!