2010-04-11 38 views
-1

我試圖創建一個登錄過程。但是,似乎不可能創建一個適用於桌面應用程序和標準網站的流程。通過網絡和桌面上的PHP應用程序的單一入口點

相反,我有Usermanagement.php登錄功能(這是一個類,icyntk),但是在其他PHP文件(api/login.php)我有:

<?php 
require_once '../usermanagement.php'; 
$m = new usermanage(); 
echo $m->login($_POST['username'], $_POST['password']); 
?> 

然後,我仍然需要再拍login.php剛與網站上的登錄表單一起使用。因爲我無法看到腳本的結果(回顯)來自index.php文件(其中登錄表單是,它只有HTML)。

有反正我可以簡化這個,所以我只需要一個login.php

+8

PHP不是專爲桌面應用程序,所以... – luiscubal 2010-04-11 13:30:49

+0

喬納森,不知道你會在你的最後一個問題可以去哪個路徑(Cookie或會話ID的手工管理)這個問題是不可能的回答。目前,這是你的應用程序,這是尷尬:) – 2010-04-11 13:34:16

+1

什麼是**肯定**問題?我看不出這個代碼有什麼問題。 – 2010-04-11 13:59:36

回答

1

據我瞭解你,你想要的是:具有登錄

    1. 網站/ web應用程序桌面應用程序(而非PHP!)記錄在使用相同的登錄方法

    一種方法是在您的網站和遠程應用程序中使用相同的API導出登錄方法,因此您將在客戶端使用JavaScript從那裏訪問API(AJAX/JSON)。你會希望使用像jQuery這樣的框架來客戶端簡化AJAX(在許多其他用途中),也可能使用PHP中的JSON模塊(使用json_encode;請注意,某些Web空間中可能無法使用該模塊,所以如果這樣失控不使用它)。當然,您不需要在API響應中使用XML或JSON,但是可以更容易地將API打開到其他(包括桌面)應用程序,而無需手動實現大量解析函數來處理接口類中的響應。

    請記住,如果您這樣做,您的網站/ webapp將無法使用JavaScript工作!在一個網站的非公開部分,沒關係,就像一個已知用戶組使用的webapp一樣,但是你不應該依靠客戶端腳本來訪問網站的公共部分。

    另一種解決方案是通過使用PHP框架來簡化這種操作,因此您可以更輕鬆地編寫服務器端前端。這基本上可以讓你給一個按鈕一個服務器端的功能,它只是簡單地調用你的登錄方法,並通過設置重定向或者替換一些面板或者你喜歡的任何東西在登錄後繼續進行相應的操作。

    當然,你可以自己做所有事情,但這通常會導致很多雜亂的代碼或者你自己的框架的實現。如果你想自己做,可以將表單發佈到同一個PHP文件,而不是額外的登錄。PHP,並添加一個隱藏字段,如:

    <input type="hidden" name="action" value="login"></input>

    在PHP中,檢查$_POST['action']=='login'並調用登錄方法。

    編輯:當你的網站將與PHP的會話或cookie的工作,你可能想跟蹤與自己的會話令牌,該令牌可以傳遞給你的桌面應用程序,所以它可以用來連續通話登錄狀態API,所以你不需要處理cookie。這些令牌也應該綁定到客戶端的IP和其他「個人」信息上;理想情況下,應將信息散列到令牌或加密的令牌中(客戶端不必「解密」,只需將其返回進行驗證即可)。令牌在閒置後也應該超時。另外,在閱讀過你的老問題之後,我擔心你可能會嘗試做一些不好的事情,比如在網絡上發送一個散列,並且簡單地檢查與你的用戶表的散列,因爲在那裏討論了JS端編碼。如果你想在客戶端實現一些加密算法,要麼確保它是安全的(很難做到這一點,除非你加密)或訴諸SSL。

  • +0

    我沒有做任何JavaScript處理,我將要使用它的唯一方法是在註冊時檢查密碼匹配並且安全,如最小長度 – 2010-04-11 17:53:43

    1

    由於桌面應用程序中的數據不太可能通過$_POST陣列發送,所以我會拒絕。網站和桌面應用程序是兩種完全不同的應用程序,認爲你可以在兩者之間共享大量的前端代碼是不現實的。

    我會嘗試儘可能多地將抽象的功能抽象爲核心類,然後創建兩個獨立的前端實現,它們以各自的方式利用核心。

    +0

    你會如何發送數據到網站,我以爲唯一的辦法是通過郵寄,但我是一個新手,所以如果你有另一種方式會很好 – 2010-04-11 16:32:05

    +0

    爲什麼這應該不太可能?只要使用HTTP進行請求,他就應該使用POST,因爲GET請求會顯示訪問日誌中的所有變量。 – Energiequant 2010-04-11 18:22:34

    +0

    我想我們可能會談論不同的事情。當您談論桌面應用程序時,我認爲您正在討論使用PHP編寫桌面應用程序(作爲Web應用程序的替代方案)。 - 如果您只是單獨編寫桌面應用程序向PHP腳本發出的HTTP請求,則不適用。瀏覽器(它只是一個桌面應用程序)和任何其他桌面應用程序如何與HTTP服務器進行通信沒有區別。 – Atli 2010-04-11 20:55:48

    0

    我要得到真正的「limby」,走出去一個巨大再用肢體和說,這是你想要做什麼:

    <?php 
    if(isset($_POST['username'])) { 
        require_once '../usermanagement.php'; 
        $m = new usermanage(); 
        echo $m->login($_POST['username'], $_POST['password']); 
    }else{ 
        ?>Put your login form HTML here<?php 
    } 
    

    這樣,你只需要一個登錄。 PHP文件。

    +0

    'if(!empty($ _ POST ['username'])&&!empty($ _ POST ['password']))',no else block,if if語句中可以將它改爲重定向到索引頁。 – 2010-04-11 14:41:09

    +0

    唯一的問題是我的HTML表單將登錄信息發佈到登錄。PHP的方式與vb.net相同。應用程序和表單之間的區別需要爲應用程序返回結果,但是對於表單結果是GET到index.php,除非有其他方式執行此操作。 – 2010-04-11 16:28:24

    +0

    @Jonathan如果是這樣的話,那麼你應該有兩個獨立的登錄文件:桌面版和網頁版。原因是因爲你有兩個不同的界面:你不希望網絡黑客竊取你的桌面版本,反之亦然。你仍然可以做一些事情,比如把登錄放在一個單獨的文件中,用include()來做。 – mattbasta 2010-04-11 16:40:05

    相關問題