PHP应用程序通过web和桌面的单一入口点

PHP应用程序通过web和桌面的单一入口点,php,login,Php,Login,我正在尝试创建一个登录过程。但似乎不可能创建一个能与桌面应用程序和标准网站协同工作的流程 相反,我在Usermanagement.php(这是一个类,icyntk)中有登录函数,但在另一个php文件(api/login.php)中有: 然后我还需要制作另一个login.php,以便与网站上的登录表单一起使用。因为我看不到从index.php文件(在登录表单所在的位置,它只有HTML)获取api/login.php脚本的结果(回声) 无论如何,我可以简化这一点,这样我只需要一个login.ph

我正在尝试创建一个登录过程。但似乎不可能创建一个能与桌面应用程序和标准网站协同工作的流程

相反,我在
Usermanagement.php
(这是一个类,icyntk)中有登录函数,但在另一个php文件(
api/login.php
)中有:


然后我还需要制作另一个
login.php
,以便与网站上的登录表单一起使用。因为我看不到从
index.php
文件(在登录表单所在的位置,它只有HTML)获取
api/login.php
脚本的结果(回声)


无论如何,我可以简化这一点,这样我只需要一个
login.php

由于桌面应用程序中的数据不太可能通过
$\u POST
数组发送,我会说不。网站和桌面应用程序是两种完全不同的应用程序,如果认为你可以在两者之间共享很多前端代码,那是不现实的


我会尝试将尽可能多的功能抽象到核心类中,然后创建两个独立的前端实现,以各自的方式利用核心。

据我所知,您需要的是:

  • 具有登录名的网站/webapp
  • 桌面应用程序(不在PHP中!)使用相同的登录方法登录
  • 一种方法是在您的网站和远程应用程序中使用相同的API导出登录方法,这样您就可以在客户端使用JavaScript从那里访问API(AJAX/JSON)。您可能需要使用一些框架,比如jQuery来简化AJAX的客户端(在许多其他用途中)以及PHP中的JSON模块(使用JSON_编码;注意该模块可能在某些web空间上不可用,因此如果失控,请不要使用它)。当然,您不需要在API响应中使用XML或JSON,但是向其他(包括桌面)应用程序打开API更容易,而无需手动实现大量解析函数来处理接口类中的响应

    请记住,如果您这样做,没有JavaScript,您的网站/webapp将无法工作!在网站的非公共部分,这是可以的,对于已知用户组使用的webapp也是可以的,但是对于网站的公共部分,您不应该依赖客户端脚本

    另一个简化方法是使用PHP框架,这样您就可以更轻松地编写服务器端前端。这将基本上使您能够为按钮提供一个服务器端函数,该函数只需调用您的登录方法,并相应地通过设置重定向或替换某个面板或在登录后继续执行的任何操作

    当然,您可以自己完成所有这些,但这通常会导致大量混乱的代码或您自己框架的实现。如果您想自己完成,首先将表单发布到同一个PHP文件中,而不是额外的login.PHP,并添加一个隐藏字段,如:

    在PHP中,选中
    $\u POST['action']=='login'
    ,并调用login方法

    编辑:当您的网站将使用PHP会话或cookie时,您可能希望使用自己的会话令牌跟踪登录状态,您可以将其传递到桌面应用程序,以便它可以用于连续调用API,因此您无需处理cookie。这些令牌还应绑定到IP,可能还有客户的其他“个人”信息;理想情况下,这些信息应该散列到令牌或加密的令牌中(客户端不必“解密”,只需将其返回以进行身份验证)。令牌在不活动后也应超时

    另外,在阅读了您以前的问题之后,我担心您可能会尝试做一些不好的事情,比如通过网络发送哈希,然后简单地在您的用户表中检查该哈希,因为这里讨论了JS端编码。如果你想在客户端实现一些加密算法,要么确保它是安全的(除非你对密码学感兴趣,否则很难做到这一点),要么求助于SSL。

    我会变得非常“利姆比”,然后说这就是你要做的:

    <?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
    }
    

    将您的登录表单HTML放在这里PHP不是为桌面应用程序设计的,因此…Jonathan,如果不知道您在最后一个问题(Cookie或会话ID的手动管理)中将要走哪条路径,这个问题是不可能回答的。目前,是你的应用程序让人尴尬:)有什么问题?我看不出这段代码有任何错误。显然,我并没有试图用php编写桌面应用程序。很抱歉,我在桌面应用程序中使用cookies作为会话ID。@luiscubal为true,但他正在尝试使桌面应用程序与PHP脚本交互,这应该是可行的。如果(!empty($\u POST['username'])和&!empty($\u POST['password'])
    ,则不使用其他块,在if语句中,您可以将其更改为重定向到索引页。唯一的问题是HTML表单以与vb.net相同的方式将登录信息发布到login.php。应用程序和表单之间的区别在于,应用程序会回显结果,但对于表单,结果会被获取到index.php,除非有其他方法可以这样做。@Jonathan如果是这样,那么您应该有两个单独的登录文件:桌面版和web版。原因是因为你有两个不同的界面:你不希望网络黑客侵入你的桌面版本,反之亦然。你仍然可以做一些事情,比如将登录名放在一个单独的文件中,然后
    include()
    include它。当你给出这个答案时,你希望web版本如何工作?也许我应该这样做一般来说,您有一个带有HTML表单的页面和一个PHP文件来接受表单的输入(然后重定向回表单)
    <?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
    }