මිනිත්තු 30 කට පසු PHP සැසියක් කල් ඉකුත්වන්නේ කෙසේද?


1057

මට විනාඩි 30 ක් සැසියක් පණපිටින් තබා එය විනාශ කිරීමට අවශ්‍යයි.


35
සැසි වේලාව සැකසීමට අවම වශයෙන් සැකසුම් දෙකක් වත් වැදගත් වන බව කරුණාවෙන් සලකන්න. නිසැකවම තීරණාත්මක ඒවා දෙක වන්නේ session.gc_maxlifetime සහ session.cookie_lifetime (මෙහි 0 යනු සමහර දිගු සංඛ්‍යාවට සමාන නොවේ). සම්පුර්ණ වශයෙන්, දීර් time කාලයක් සඳහා 100% ක නිශ්චිතභාවයක් ලබා ගැනීම සඳහා, සැසිය ගොනු සැකසීමට පෙර / සැසි ලිපිගොනු වල මෙහෙයුම් පද්ධතිය පාලනය කරන පිරිසිදු කිරීමේ කාලය වෙනස් වීම නිසා සැසිය සැකසීමට අවශ්‍ය විය හැකිය.
ක්සායි

1
ඔබට සැසිය කල් ඉකුත්වීමට අවශ්‍ය ඇයි දැයි මට තේරෙන්නේ නැත. පරිශීලකයා තම පරිගණකය ලොග් නොවී ඉවත්ව යන බව ඔබ කනස්සල්ලට පත්වුවහොත් සහ අනවසර පරිශීලකයෙකු තම පරිගණකය භාර ගනී නම්, ඔබේ වෙබ් අඩවියේ සැසිවාරය කල් ඉකුත්වීම නිසා කොල්ලකරු විසින් ගොදුරට ගොනුව තැටියට පිවිසීම වලක්වනු නොලැබේ.
ගක්න්බිග්

ඔබ මෙහි අසන්නේ කුමක්ද යන්න එහි අපැහැදිලි ය. ඔබ අක්‍රීය අක්‍රීය කාල සීමාවක් ක්‍රියාත්මක කිරීමට අවශ්‍ය යැයි ඔබ අදහස් කරනවාද (දැනට PHP විසින් සැසිවාරය භාවිතා කිරීමට සැසිවාරය භාවිතා කිරීමට සතුටින් ඉඩ දෙනු ඇත. සැසිය. Gc_maxlifetime ට වඩා වැඩි කාලයක් ස්පර්ශ කර නැති සැසියක් භාවිතා කිරීමට) හෝ ඔබ අදහස් කරන්නේ සැසිය විනාඩි 30 කට සීමා කිරීමට ඔබට අවශ්‍යද? අක්‍රියතාව? අවංකවම මම සිතන්නේ මෙහි පිළිගත් පිළිතුර එක් ගැටලුවකට වඩා නරක උපදෙස් බවයි - අවස්ථා දෙකේදීම තර්කනය අභිරුචි සැසි හසුරුවන්නෙකු සමඟ ක්‍රියාත්මක කළ යුතුය.
symcbean

Answers:


1670

ඔබ විසින්ම සැසිය කල් ඉකුත්වීම ක්‍රියාත්මක කළ යුතුය. අනෙක් අය සඳහන් කළ විකල්ප දෙකම ( session.gc_maxlifetime සහ session.cookie_lifetime ) විශ්වාසදායක නොවේ. ඒ සඳහා හේතු මම පැහැදිලි කරන්නම්.

පලමු:

session.gc_maxlifetime
session.gc_maxlifetime දත්ත 'කුණු කසළ' ලෙස දැක පිරිසිදු කළ තත්පර ගණන නියම කරයි. සැසි ආරම්භයේදී කසළ එකතු වේ.

නමුත් කසළ එකතු කරන්නා ආරම්භ කරනු ලබන්නේ session.gc_probability හි සම්භාවිතාවයකින් පමණි බෙදීම session.gc_divisor . එම විකල්ප සඳහා පෙරනිමි අගයන් භාවිතා කරමින් (පිළිවෙලින් 1 සහ 100), අවස්ථාව ලැබෙන්නේ 1% ක් පමණි.

හොඳයි, කසළ එකතු කරන්නා බොහෝ විට ආරම්භ කිරීම සඳහා ඔබට මෙම අගයන් සරලව සකස් කළ හැකිය. නමුත් කසළ එකතු කරන්නා ආරම්භ කළ විට, එය සෑම ලියාපදිංචි සැසියකටම වලංගුභාවය පරීක්ෂා කරනු ඇත. එය පිරිවැය අධිකය.

තවද, PHP පෙරනිමි භාවිතා කරන විට session.save_handler ගොනු, එම සැසි දත්ත ගොනු හි නිශ්චිතව දක්වා මාර්ගය තුළ ගබඩා කර ඇත session.save_path . එම සැසි හසුරුවන්නා සමඟ, සැසි දත්තවල වයස ගණනය කරනු ලබන්නේ ගොනුවේ අවසාන වෙනස් කිරීමේ දිනය මත වන අතර අවසාන පිවිසුම් දිනය නොවේ:

සටහන: ඔබ සුපුරුදු ලිපිගොනු පාදක සැසි හසුරුව භාවිතා කරන්නේ නම්, ඔබේ ගොනු පද්ධතිය ප්‍රවේශ වේලාවන් (වේලාව) නිරීක්ෂණය කළ යුතුය. වින්ඩෝස් ෆැට් එසේ නොවේ, ඔබ ෆැට් ගොනු පද්ධතියක් හෝ වේලාසන ලුහුබැඳීම් නොමැති වෙනත් ගොනු පද්ධතියක් සමඟ සිරවී ඇත්නම් ඔබේ සැසිය එකතු කරන කසළ හැසිරවීමට වෙනත් ක්‍රමයක් ඉදිරිපත් කිරීමට ඔබට සිදුවේ. PHP 4.2.3 සිට එය භාවිතා කර ඇත්තේ වේලාව වෙනුවට mtime (වෙනස් කළ දිනය) ය. එබැවින්, කාලානුරූපව ලුහුබැඳීම නොමැති ගොනු පද්ධති සමඟ ඔබට ගැටළු ඇති නොවේ.

සැසි දත්ත මෑතකදී යාවත්කාලීන නොවූ හෙයින් සැසිය තවමත් වලංගු යැයි සලකන අතර සැසි දත්ත ගොනුවක් මකා දැමීම මීට අමතරව සිදුවිය හැකිය.

දෙවනුව:

session.cookie_lifetime
session.cookie_lifetime බ්‍රව්සරයට යවන තත්පර කිහිපයකින් කුකියේ ආයු කාලය නියම කරයි. […]

ඔව් ඒක නිවැරදියි. මෙය කුකී ජීවිත කාලය සඳහා පමණක් බලපාන අතර සැසිය තවමත් වලංගු විය හැකිය. නමුත් සේවාදායකයා නොව සැසියක් අවලංගු කිරීම සේවාදායකයාගේ කාර්යය වේ. එබැවින් මෙය කිසිම දෙයකට උදව් නොකරයි. ඇත්ත වශයෙන්ම, session.cookie_lifetime ලෙස සකසා තිබීම 0සැසියේ කුකිය සැබෑ සැසි කුකියක් බවට පත් කරනු ඇත, එය වලංගු වන්නේ බ්‍රව්සරය වැසෙන තුරු පමණි.

නිගමනය / හොඳම විසඳුම:

හොඳම විසඳුම වන්නේ ඔබේම සැසියක් කල් ඉකුත්වීමයි. අවසාන ක්‍රියාකාරකම (එනම් ඉල්ලීම) දැක්වෙන සරල කාල මුද්දරයක් භාවිතා කර සෑම ඉල්ලීමක් සමඟම එය යාවත්කාලීන කරන්න:

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

සෑම ඉල්ලීමක් සමඟම සැසි දත්ත යාවත්කාලීන කිරීම සැසි ගොනුවේ වෙනස් කිරීමේ දිනය ද වෙනස් කරයි, එවිට කුණු එකතු කරන්නා විසින් සැසිවාරය කල්තියා ඉවත් නොකෙරේ.

සැසිවාරය නිවැරදි කිරීම වැනි සැසි වලට පහර දීම වළක්වා ගැනීම සඳහා වරින් වර සැසි හැඳුනුම්පත ප්‍රතිනිර්මාණය කිරීමට ඔබට අතිරේක කාල මුද්දරයක් භාවිතා කළ හැකිය :

if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 1800) {
    // session started more than 30 minutes ago
    session_regenerate_id(true);    // change session ID for the current session and invalidate old session ID
    $_SESSION['CREATED'] = time();  // update creation time
}

සටහන්:

  • session.gc_maxlifetime මෙම අභිරුචි කල් ඉකුත් වීමේ හසුරුවන්නාගේ ආයු කාලය අවම වශයෙන් සමාන විය යුතුය (මෙම උදාහරණයේ 1800);
  • ආරම්භයේ සිට මිනිත්තු 30 කට පසුව නොව විනාඩි 30 ක ක්‍රියාකාරකම් වලින් පසු සැසිය කල් ඉකුත්වීමට ඔබට අවශ්‍ය නම් , සැසි කුකිය ක්‍රියාකාරීව තබා ගැනීම සඳහා කල් ඉකුත් වීමක් සමඟ ඔබ භාවිතා කළ යුතුය .setcookietime()+60*30

3
ඔබට "අක්‍රිය කාලය" පරීක්ෂා කිරීමට අවශ්‍ය නම් මෙය වෙනස් කරන්නේ කෙසේද? වෙනත් වචන වලින් කිවහොත්, පරිශීලකයා ලොග් වන අතර, ඔවුන් දිගටම වෙබ් අඩවිය භාවිතා කරන තාක් කල්, එය ඒවායින් ඉවත් නොවේ. කෙසේ වෙතත් ඒවා විනාඩි 30 ක් අක්‍රිය නම් එය ඒවායින් ඉවත් වේ ද?
මෙට්‍රොපොලිස්

14
Et මෙට්‍රොපොලිස්: ඔබ පරිශීලකයාගේ අවසන් ක්‍රියාකාරකම් කාලය ගබඩා කළ ස්ථානයට $_SESSION['LAST_ACTIVITY']සමාන දෙයක් භාවිතා කරන්න, $_SESSION['CREATED']නමුත් සෑම ඉල්ලීමක් සමඟම එම අගය යාවත්කාලීන කරන්න. දැන් එම කාලය වර්තමාන කාලයට වඩා තත්පර 1800 ට වඩා විශාල නම්, සැසිය විනාඩි 30 කට වඩා භාවිතා කර නොමැත.
ගුම්බෝ

3
Et මෙට්‍රොපොලිස්: session_unsetඒ හා සමානයි $_SESSION = array().
ගුම්බෝ

14
Umb ගුම්බෝ - ඉමා ටිකක් ව්‍යාකූලයි, ඔබ ඔබේ කේතය සමඟ ඒකාබද්ධව භාවිතා කළ යුතු ini_set('session.gc-maxlifetime', 1800)නොවේද? එසේ නොමැතිනම් ඔබගේ සැසිය තවමත් වලංගු යැයි සිතිය හැකි අතර ඔබේ සැසි තොරතුරු විනාශ විය හැකිය, අවම වශයෙන් ini සැකසුම සම්මත මිනිත්තු 24 නම්. නැත්නම් මට යමක් මග හැරී තිබේද?
ජෙරෝන්

10
@ ජෙරොන්: ඔව්, ඔබ කළ යුතුයි. සැසිය සුරැකීමේ හසුරුව භාවිතා කරන්නේ නම් session.gc_maxlifetime ගොනුවේ අවසාන වෙනස් කිරීමේ දිනය මත රඳා පවතින බව සලකන්න files. එබැවින් session.gc_maxlifetime මෙම අභිරුචි කල් ඉකුත් වීමේ හසුරුවන්නාගේ ආයු කාලය අවම වශයෙන් සමාන විය යුතුය.
ගුම්බෝ

135

මිනිත්තු 30 කින් PHP සැසි කල් ඉකුත්වීමේ සරල ක්‍රමය.

සටහන: ඔබට කාලය වෙනස් කිරීමට අවශ්‍ය නම්, ඔබ කැමති වේලාව සමඟ 30 වෙනස් කර * 60 වෙනස් නොකරන්න: මෙය මිනිත්තු ලබා දෙයි.


මිනිත්තු කිහිපයකින්: (30 * 60)
දින කිහිපයකින්: ( n * 24 * 60 * 60) n = දින ගණන


Login.php

<?php
    session_start();
?>

<html>
    <form name="form1" method="post">
        <table>
            <tr>
                <td>Username</td>
                <td><input type="text" name="text"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="pwd"></td>
            </tr>
            <tr>
                <td><input type="submit" value="SignIn" name="submit"></td>
            </tr>
        </table>
    </form>
</html>

<?php
    if (isset($_POST['submit'])) {
        $v1 = "FirstUser";
        $v2 = "MyPassword";
        $v3 = $_POST['text'];
        $v4 = $_POST['pwd'];
        if ($v1 == $v3 && $v2 == $v4) {
            $_SESSION['luser'] = $v1;
            $_SESSION['start'] = time(); // Taking now logged in time.
            // Ending a session in 30 minutes from the starting time.
            $_SESSION['expire'] = $_SESSION['start'] + (30 * 60);
            header('Location: http://localhost/somefolder/homepage.php');
        } else {
            echo "Please enter the username or password again!";
        }
    }
?>

HomePage.php

<?php
    session_start();

    if (!isset($_SESSION['luser'])) {
        echo "Please Login again";
        echo "<a href='http://localhost/somefolder/login.php'>Click Here to Login</a>";
    }
    else {
        $now = time(); // Checking the time now when home page starts.

        if ($now > $_SESSION['expire']) {
            session_destroy();
            echo "Your session has expired! <a href='http://localhost/somefolder/login.php'>Login here</a>";
        }
        else { //Starting this else one [else1]
?>
            <!-- From here all HTML coding can be done -->
            <html>
                Welcome
                <?php
                    echo $_SESSION['luser'];
                    echo "<a href='http://localhost/somefolder/logout.php'>Log out</a>";
                ?>
            </html>
<?php
        }
    }
?>

LogOut.php

<?php
    session_start();
    session_destroy();
    header('Location: http://localhost/somefolder/login.php');
?>

42
එම්.වී.සී. සම්මතය වන මෙම දිනය හා වයස තුළ තර්කනය සහ ඉදිරිපත් කිරීම ඒකාබද්ධ කිරීම වැරදි ලෙස උපදෙස් දෙනු ලැබේ.
bcosca

සමහර විට මට සැසි පිළිබඳ මූලික යමක් මග හැරී ඇති නමුත් මෙහෙයුම් පද්ධතිය විසින් සෑම විනාඩි 30 කට වරක් සැසි විනාශ වුවහොත් එයින් ඇති ප්‍රයෝජනය කුමක්ද?

25
ill ඔබ වෙනුවෙන්ම කතා කරන්න [සිනහව] මම එම්වීසී පිළිකුල් සහගත ලෙස සලකමි.

2
තනි ක්‍රමලේඛකයෙකු සමඟ ව්‍යාපෘතිය කුඩා වූවත් MVC හොඳ අදහසක් ද? මම MVC මාදිලියේ මගේම ව්‍යාපෘති කළ යුතු යැයි මට හැඟේ (නැතහොත් එය MVC බවට පත්කරන ගැටලුව විසඳන්න) නමුත් MVC පිළිබඳ අත්දැකීම් නොමැතිකම නිසා එය මානසික අවහිරයක් බවට පත්වේ "මම මෙම MVC කරන්නේ කෙසේද?" සහ විසඳුමක් අවශ්‍ය වන මූලික ඉලක්කය / ගැටලුවෙන් ra ත්වීම.
මිස්ටර්විම්ස්

1
obbsosca මෙහි බොහෝ දෙනෙක් කළ යුතු පරිදි, ඔබ ගැටළු වලට විසඳුම් ගැන කරදර වීමට වැඩි කාලයක් ගත කළ යුතු අතර, ඔබ වලංගු යැයි සිතන යම් කරුණක් ඉදිරිපත් කිරීම සඳහා ප්‍රශ්නයක් පැහැර ගැනීමට වඩා OP හට එය
වටහා

43

නියමිත වේලාවට පසුව පරිශීලකයා ඉවත් වීම මෙයද? එය ලියාපදිංචි වූ විට සැසිය නිර්මාණය කිරීමේ කාලය (හෝ කල් ඉකුත් වීමේ වේලාව) සැකසීම, ඉන්පසු සෑම පිටුවකම පැටවීම පාලනය කළ හැකිදැයි පරීක්ෂා කිරීම.

උදා:

$_SESSION['example'] = array('foo' => 'bar', 'registered' => time());

// later

if ((time() - $_SESSION['example']['registered']) > (60 * 30)) {
    unset($_SESSION['example']);
}

සංස්කරණය කරන්න: ඔබ වෙනත් දෙයක් අදහස් කළත් මට හැඟීමක් ඇති විය.

session.gc_maxlifetimeIni සැකසුම භාවිතා කිරීමෙන් ඔබට නිශ්චිත ආයුකාලයකින් පසු සැසි සීරීමට හැකිය:

සංස්කරණය කරන්න: ini_set ('session.gc_maxlifetime', 60 * 30);


1
session.gc-maxlifetime යන්න හොඳම ක්‍රමයයි.
පවර්ලර්ඩ්

2
සැසි කුකී ජීවිත කාලය තුළ ගැටළු කිහිපයක් තිබේ, විශේෂයෙන් එය බලාත්මක කිරීම සඳහා සේවාදායකයා මත රඳා පවතී. සේවාදායකයාට නිෂ් less ල / කල් ඉකුත් වූ කුකීස් පිරිසිදු කිරීමට ඉඩ දීම සඳහා කුකී ජීවිත කාලය පවතී, එය ආරක්ෂාව සම්බන්ධ කිසිවක් සමඟ පටලවා නොගත යුතුය.
ජැකෝ

එය gc_maxlifetimeහෝ gc-maxlifetime. එය අවධාරනය සහ යටි ඉර යන දෙකටම සහය දක්වයිද?
මයික් කෝසර්

24

සැසිය කල් ඉකුත්වීම පාලනය කිරීමේ ක්‍රම කිහිපයක් මෙම ලිපියෙන් දැක්වේ: http://bytes.com/topic/php/insights/889606-setting-timeout-php-session

IMHO දෙවන විකල්පය කදිම විසඳුමකි:

<?php
/***
 * Starts a session with a specific timeout and a specific GC probability.
 * @param int $timeout The number of seconds until it should time out.
 * @param int $probability The probablity, in int percentage, that the garbage 
 *        collection routine will be triggered right now.
 * @param strint $cookie_domain The domain path for the cookie.
 */
function session_start_timeout($timeout=5, $probability=100, $cookie_domain='/') {
    // Set the max lifetime
    ini_set("session.gc_maxlifetime", $timeout);

    // Set the session cookie to timout
    ini_set("session.cookie_lifetime", $timeout);

    // Change the save path. Sessions stored in teh same path
    // all share the same lifetime; the lowest lifetime will be
    // used for all. Therefore, for this to work, the session
    // must be stored in a directory where only sessions sharing
    // it's lifetime are. Best to just dynamically create on.
    $seperator = strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN") ? "\\" : "/";
    $path = ini_get("session.save_path") . $seperator . "session_" . $timeout . "sec";
    if(!file_exists($path)) {
        if(!mkdir($path, 600)) {
            trigger_error("Failed to create session save path directory '$path'. Check permissions.", E_USER_ERROR);
        }
    }
    ini_set("session.save_path", $path);

    // Set the chance to trigger the garbage collection.
    ini_set("session.gc_probability", $probability);
    ini_set("session.gc_divisor", 100); // Should always be 100

    // Start the session!
    session_start();

    // Renew the time left until this session times out.
    // If you skip this, the session will time out based
    // on the time when it was created, rather than when
    // it was last used.
    if(isset($_COOKIE[session_name()])) {
        setcookie(session_name(), $_COOKIE[session_name()], time() + $timeout, $cookie_domain);
    }
}

19

හොඳයි, ඉහත පිළිතුරු නිවැරදි බව මට වැටහී ඇති නමුත් ඒවා යෙදුම් මට්ටමේ ඇත, .htaccessකල් ඉකුත් වීමේ වේලාව සැකසීමට අපි ගොනුව භාවිතා නොකරන්නේ ඇයි ?

<IfModule mod_php5.c>
    #Session timeout
    php_value session.cookie_lifetime 1800
    php_value session.gc_maxlifetime 1800
</IfModule>

1
Answer ලොඩ්ගේ පිළිතුර මෙම පිළිතුර විශ්වාස කළ නොහැක්කේ මන්දැයි පරිපූර්ණ පැහැදිලි කිරීමක් ලබා දෙයි.
emix

15
if (isSet($_SESSION['started'])){
    if((mktime() - $_SESSION['started'] - 60*30) > 0){
        //Logout, destroy session, etc.
    }
}
else {
    $_SESSION['started'] = mktime();
}

15

මෙය session_set_cookie_paramsසෑදීම සඳහා ෆන්සිටන් භාවිතා කරන්න .

පෙර මෙම ශ්‍රිතය ඇමතීම අවශ්‍ය වේ session_start()ඇමතීමට ඇමතීම අවශ්‍ය වේ.

මේක උත්සාහ කරන්න:

$lifetime = strtotime('+30 minutes', 0);

session_set_cookie_params($lifetime);

session_start();

වැඩි විස්තර බලන්න: http://php.net/manual/function.session-set-cookie-params.php


11

පහත දැක්වෙන ආකාරයේ ශ්‍රිතයක් සමඟ එය සැබවින්ම පහසුය. එය 'id' සහ 'time' යන ක්ෂේත්‍ර සහිත දත්ත සමුදා නාමය 'සැසි' භාවිතා කරයි.

පරිශීලකයා නැවත ඔබේ වෙබ් අඩවියට හෝ සේවාවට පිවිසෙන සෑම අවස්ථාවකම ඔබ මෙම ශ්‍රිතයේ ප්‍රතිලාභ අගය සත්‍ය දැයි පරීක්ෂා කර බැලිය යුතුය. එය වැරදියි නම් පරිශීලකයා කල් ඉකුත් වී සැසිය විනාශ වනු ඇත (සටහන: මෙම ශ්‍රිතය දත්ත සමුදාය සම්බන්ධ කිරීමට හා විමසීමට දත්ත සමුදා පන්තියක් භාවිතා කරයි, ඇත්ත වශයෙන්ම ඔබට එය ඔබගේ ශ්‍රිතය තුළ හෝ එවැනි දෙයක් කළ හැකිය):

function session_timeout_ok() {
    global $db;
    $timeout = SESSION_TIMEOUT; //const, e.g. 6 * 60 for 6 minutes
    $ok = false;
    $session_id = session_id();
    $sql = "SELECT time FROM sessions WHERE session_id = '".$session_id."'";
    $rows = $db->query($sql);
    if ($rows === false) {
        //Timestamp could not be read
        $ok = FALSE;
    }
    else {
        //Timestamp was read succesfully
        if (count($rows) > 0) {
            $zeile = $rows[0];
            $time_past = $zeile['time'];
            if ( $timeout + $time_past < time() ) {
                //Time has expired
                session_destroy();
                $sql = "DELETE FROM sessions WHERE session_id = '" . $session_id . "'";
                $affected = $db -> query($sql);
                $ok = FALSE;
            }
            else {
                //Time is okay
                $ok = TRUE;
                $sql = "UPDATE sessions SET time='" . time() . "' WHERE session_id = '" . $session_id . "'";
                $erg = $db -> query($sql);
                if ($erg == false) {
                    //DB error
                }
            }
        }
        else {
            //Session is new, write it to database table sessions
            $sql = "INSERT INTO sessions(session_id,time) VALUES ('".$session_id."','".time()."')";
            $res = $db->query($sql);
            if ($res === FALSE) {
                //Database error
                $ok = false;
            }
            $ok = true;
        }
        return $ok;
    }
    return $ok;
}

9

සැසිය තුළ කාලරාමුව ගබඩා කරන්න


<?php    
$user = $_POST['user_name'];
$pass = $_POST['user_pass'];

require ('db_connection.php');

// Hey, always escape input if necessary!
$result = mysql_query(sprintf("SELECT * FROM accounts WHERE user_Name='%s' AND user_Pass='%s'", mysql_real_escape_string($user), mysql_real_escape_string($pass));

if( mysql_num_rows( $result ) > 0)
{
    $array = mysql_fetch_assoc($result);    

    session_start();
    $_SESSION['user_id'] = $user;
    $_SESSION['login_time'] = time();
    header("Location:loggedin.php");            
}
else
{
    header("Location:login.php");
}
?>

දැන්, කාලරාමුව අවසර ලත් කවුළුව තුළ තිබේදැයි පරීක්ෂා කරන්න (තත්පර 1800 විනාඩි 30 යි)

<?php
session_start();
if( !isset( $_SESSION['user_id'] ) || time() - $_SESSION['login_time'] > 1800)
{
    header("Location:login.php");
}
else
{
    // uncomment the next line to refresh the session, so it will expire after thirteen minutes of inactivity, and not thirteen minutes after login
    //$_SESSION['login_time'] = time();
    echo ( "this session is ". $_SESSION['user_id'] );
    //show rest of the page and all other content
}
?>

8

සෑම පිටුවකම පටවා ඇති ඔබගේ ඇතුළත් ගොනුවේ කරුණාකර පහත කේත වාරණය භාවිතා කරන්න.

$expiry = 1800 ;//session expiry required after 30 mins
    if (isset($_SESSION['LAST']) && (time() - $_SESSION['LAST'] > $expiry)) {
        session_unset();
        session_destroy();
    }
    $_SESSION['LAST'] = time();

1

මිනිත්තු 30 ක් සඳහා මෙම පන්තිය භාවිතා කරන්න

class Session{
    public static function init(){
        ini_set('session.gc_maxlifetime', 1800) ;
        session_start();
    }
    public static function set($key, $val){
        $_SESSION[$key] =$val;
    }
    public static function get($key){
        if(isset($_SESSION[$key])){
            return $_SESSION[$key];
        } else{
            return false;
        }
    }
    public static function checkSession(){
        self::init();
        if(self::get("adminlogin")==false){
            self::destroy();
            header("Location:login.php");
        }
    }
    public static function checkLogin(){
        self::init();
        if(self::get("adminlogin")==true){
            header("Location:index.php");
        }
    }
    public static function destroy(){
        session_destroy();
        header("Location:login.php");
    }
}

1

PHP සැසි හසුරුවන ආකාරය ආරම්භකයින්ට තේරුම් ගැනීමට තරමක් ව්‍යාකූල වේ. සැසි ක්‍රියාත්මක වන ආකාරය පිළිබඳ දළ විශ්ලේෂණයක් ලබා දීමෙන් මෙය ඔවුන්ට උදව් විය හැකිය: සැසි ක්‍රියා කරන ආකාරය (අභිරුචි-සැසි හසුරුවන්නන්)


0

කාලරාමුව භාවිතා කරමින් ...

<?php
if (!isset($_SESSION)) {
    $session = session_start();
} 
if ($session && !isset($_SESSION['login_time'])) {
    if ($session == 1) {
        $_SESSION['login_time']=time();
        echo "Login :".$_SESSION['login_time'];
        echo "<br>";
        $_SESSION['idle_time']=$_SESSION['login_time']+20;
        echo "Session Idle :".$_SESSION['idle_time'];
        echo "<br>";
    } else{
        $_SESSION['login_time']="";
    }
} else {
    if (time()>$_SESSION['idle_time']){
        echo "Session Idle :".$_SESSION['idle_time'];
        echo "<br>";
        echo "Current :".time();
        echo "<br>";
        echo "Session Time Out";
        session_destroy();
        session_unset();
    } else {
        echo "Logged In<br>";
    }
}
?>

කාලරාමුව භාවිතා කරමින් සැසිය කල් ඉකුත්වීමට මම තත්පර 20 ක් භාවිතා කර ඇත.

ඔබට විනාඩි 30 ක් අවශ්‍ය නම් 1800 (තත්පර 30 කින්) එකතු කරන්න ...


0

ඔබට විකල්පයක් ලෙස එය කිරීමට කෙලින්ම DB භාවිතා කළ හැකිය. මම chk_lgn ලෙස හඳුන්වන ඩීබී ශ්‍රිතයක් භාවිතා කරමි.

පුරනය වීමේ චෙක්පත් ඒවා පුරනය වී ඇත්දැයි බැලීමට පරීක්ෂා කරන්න, එසේ කිරීමෙන්, එය පරිශීලකයාගේ db පේළියේ / තීරුවේ අවසන් වරට ක්‍රියාකාරී ලෙස චෙක්පතෙහි දින මුද්දරය සකසයි.

මමත් එහි වේලාව පරීක්ෂා කරමි. සෑම පිටුවකටම මම මෙම ශ්‍රිතය භාවිතා කරන බැවින් මෙය මේ මොහොතේ මට වැඩ කරයි.

PS මා දුටු කිසිවෙකු පිරිසිදු DB විසඳුමක් යෝජනා කර නැත.


-1

වත්මන් කාලය ගබඩා කර එය සංසන්දනය කිරීමෙන් මිනිත්තු 30 ඉක්මවා ඇත්නම් වත්මන් සැසිය විනාශ කරන්න.


ඔබ එය ඇගයීමට ලක් කරන එකම අවස්ථාව සැසිය භාවිතා කරන විට නේද?
එරික් ක්‍රාමර්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.