簡體   English   中英

不是在Php中創建會話超時,而是在哪里?

[英]Not how to create a session timeout in Php, but where?

我的老板購買了一些基於Web的軟件(PC Repair Tracker,這很了不起),並讓我負責將其安裝在我們的域中,配置數據庫,定價,外觀(html / css)。 票務系統等。它基本上是您購買的模板,可以完全自定義以滿足您的需求。

配置它還算不錯,即使考慮到我仍然還是PHP MySQL的新手,等等。我的老板要求我“在一段時間后注銷”,因為它包含敏感信息,並且員工會跟蹤維修情況以了解誰何時需要在我們商店中的設備上獲取信息。 他的意思是我需要編寫一個超時函數。

問題不僅在於創建超時功能,還在於知道將其放置在哪里? 網站文件夾中可能有近100個文件,每個文件都是.php文件(css內容和圖像除外)。 我是否使用直觀的方法並從login.php開始?

我怎么知道該怎么稱呼我的變量?

該界面從登錄頁面登錄頁面開始。 我認為我不想從login.php開始,因為它們至少需要登錄。

我安裝了適用於Firefox的FirePHP,並注意到一個函數被調用:它說:

    GET ajaxhelpers.php?func=refreshnotifications

它每分鍾左右彈出一次。 當我找到該.php文件時,它很短,並說:

    if (array_key_exists('func',$_REQUEST)) {
$func = $_REQUEST['func'];
} else {
$func = "";
}
function nothing() {
}
function refreshnotifications() {
require("deps.php");
require_once("common.php");
echo pcrtnotify();
}
switch($func) {

    default:
    nothing();
    break;

    case "refreshnotifications":
    refreshnotifications();
    break;
}
?>

我還找到了將用戶發送到登錄頁面的“ validate.php”。 我可以在其中放置一個函數嗎?

<?php
        include("deps.php");
$validated = false;

//Use $_COOKIE to get the cookie data . same usage as $_POST
if(isset($_COOKIE["username"])&&isset($_COOKIE["password"])) {

$user = $_COOKIE["username"];
$pass = $_COOKIE["password"];

//Begin validation code
if(isset($passwords[$user])) if($passwords[$user]== $pass) $validated = true;
//End validation code
}

if($validated) {
//Ok; don.t need to do anything
} else {
//Make user go to login page

die("<a href=../store/login.php class=\"linkbuttonmedium linkbuttongray radiusall\">please login</a>");


exit;
}
?>

這是一個好的開始嗎? 很抱歉,這個冗長的問題。 我不是在尋求作業建議或其他任何東西。 我只是想以速成課程學習php,因為他昨天想獲得結果。 大聲笑。

好像我可以在上面放個條件,

    if($validated && idle_time > time_allowed) {
       go to logout.php
    }

但話又說回來,我是php noob。

搜索session_start()並在該行之前添加以下內容

session_set_cookie_params(3600,"/");

該數字以秒為單位。 因此3600代表一小時。

好的。 我做了一些進一步的挖掘,發現了validate2.php和logout.php文件。 好吧,我已經知道logout.php存在,我只是仔細看了一下代碼。 在內部,它包含變量$ cookiedomain的條件邏輯,並且還包含用戶的Cookie過期時的值。 如果我說錯所有這些,請原諒我。 我還在學習php。 只是試圖將基本邏輯應用於所有這些。

因此,validate.php文件最終將執行的操作是檢查布爾值$ validated是否為true。 如果是真的,它將繼續進行並為您提供刷新的能力。 如果通過驗證,則會在屏幕上顯示一個小按鈕,顯示“請登錄”。 1)這是馬虎,很難找到。 2)時間設置為10小時。

因此,出於測試目的,我在validate.php和logout.php中將數字設置為20,就像這樣(我在代碼中使用了新值120,因為我更改了它,因為20秒顯然太短了):

login.php

if(isset($cookiedomain)) {
setcookie("username", $user, time()+120, "/","$cookiedomain");
setcookie("password", $pass, time()+120, "/","$cookiedomain"); 
} else {
setcookie("username", $user, time()+120, "/");
setcookie("password", $pass, time()+120, "/");
}

logout.php

        if(isset($cookiedomain)) {
setcookie("username", $user, time()-120, "/","$cookiedomain");
setcookie("password", $pass, time()-120, "/","$cookiedomain");
} else {
setcookie("username", $user, time()-120, "/");
setcookie("password", $pass, time()-120, "/");
}

validate2.php

        if($validated) {
  //Ok. don't need to do anything
} else {
//Make user go to login page
echo '<script type ="text/javascript">alert("Sorry, ' . $user . ', but you have been logged out due to inactivity.");</script>';

 exit;
}

它仍然沒有打印用戶名,只是打印一個'',因此我仍然需要進行處理。 丑陋的按鈕不見了,它給用戶一個很好的,明顯的通知,告知他們已經注銷。 我想使按鈕重定向,所以現在開始處理該部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM