2016-07-22 111 views
-1

所以我的問題是這樣的 - 我有自定義的身份驗證代碼,基於註冊的用戶數據在數據庫中寫入`在線`表ip,會話ID和用戶ID(如果登錄名和密碼匹配)。
Soo我有一些只需要通過身份驗證時才需要的js腳本,如果您未登錄(不是不安全,但爲什麼要放棄操場),我不希望它們可訪問,並且我希望所有腳本都在一個.js文件。
Soo我thoght也許我可以使用.htacces密碼保護的文件夾,當我登錄到管理面板一些PHP代碼讓我也登錄在該appache系統 - 這可能嗎?或者我需要製作js文件php然後包含它或其他東西?我很困惑。通過.htaccess自定義登錄身份驗證

+0

這是一個有趣的概念(基於用戶的登錄狀態發送不同的JS的內容) 。 – BeetleJuice

回答

1

當然你可以做到這一點!但是有一種更簡單的方法。只需使用一個PHP文件作爲腳本標籤的src屬性,並設置該文件來處理請求:

其JavaScript是發送到客戶端
<script src="/path/to/js_handler.php"></script> 

的PHP文件控制。這是因爲PHP腳本可以告訴用戶是否通過查看$_SESSION變量登錄:

js_handler.php

<?php 
    if(session_status()=== PHP_SESSION_NONE) session_start(); 
    $loggedIn = false; 

    //determine whether the user is logged in by looking at values set 
    // in $_SESSION by the login script. This is just an example 
    if(isset($_SESSION['user']) && $_SESSION['expires'] > time()) 
     $loggedIn = true; 

    //set JS header (otherwise the browser will expect an HTML file) 
    header('Content-Type: application/javascript'); 

    //now send the right file to the browser 
    if($loggedIn){ 
     //instruct the browser and proxies to never cache this file. Probably 
     //better just set short caching (1-2hrs) to reduce server load 
     header("Cache-Control: no-cache, no-store, must-revalidate"); 
     header("Expires: 0"); 

     readfile('/path/to/private.js'); 
    } 
    else{ 
     //allow caching and reusing for up to 7 days 
     header("Cache-Control: max-age=" . 60*60*24*7); //max age allowed: 7 days 
     header("Expires: ".gmdate('D, d M Y H:i:s', time() + 60*60*24*7).' GMT'); 

     readfile('/path/to/public.js'); 
    } 
+0

感謝你的消化,它的工作就像一個魅力,但還有一個問題 - 瀏覽器chache javascript是否包含在這個maner? –

+0

'.php'文件通常不被緩存,但JavaScript文件被緩存,所以我不知道默認會發生什麼。但是,您可以通過設置緩存標題來自行控制它。我編輯了我的答案,告訴你如何讓瀏覽器緩存7天(對於'public.js'),以及如何告訴瀏覽器永遠不要緩存(對於'private.js')。意識到如果你設置'永不緩存',瀏覽器每次打開一個使用腳本的新頁面時都會保持重新加載。這會減慢你的網站,可能會打擾你的用戶。也許短緩存(1-6小時)更好 – BeetleJuice