我正在尝试创建一个登录过程。但似乎不可能创建一个适用于桌面应用程序和标准网站的流程。
相反,我在Usermanagement.php
(这是一个类,icyntk)中有登录功能,但是在另一个php文件(api/login.php
)中我有:
<?php
require_once '../usermanagement.php';
$m = new usermanage();
echo $m->login($_POST['username'], $_POST['password']);
?>
然后我还需要制作另一个login.php
,以便与网站上的登录表单一起使用。我无论如何都无法从api/login.php
文件(登录表单所在的位置)获取index.php
脚本的结果(回显),但它只包含HTML。
无论如何我可以简化这个,所以我只需要一个login.php
?
答案 0 :(得分:1)
由于桌面应用程序中的数据不太可能通过$_POST
阵列发送,我会拒绝。网站和桌面应用程序是两种完全不同类型的应用程序,认为您可以在两者之间共享大部分前端代码是不现实的。
我会尝试尽可能多地将功能抽象到核心类中,然后创建两个独立的前端实现,这些实现利用核心,每个都以自己的方式。
答案 1 :(得分:1)
据我所知,你想要的是:
一种方法是在您的网站和远程应用程序中使用相同的API导出登录方法,因此您将在客户端使用JavaScript从那里访问API(AJAX / JSON)。您将需要使用一些框架,例如jQuery用于客户端简化AJAX(在许多其他用途中)以及PHP中的JSON模块(使用json_encode;请注意该模块可能在某些网站空间中不可用,所以如果这是失控不要使用它)。当然,您不需要在API响应中使用XML或JSON,但是更容易将API打开到其他(包括桌面)应用程序,而无需手动实现大量解析函数来处理接口类中的响应。 / p>
请注意,如果您这样做,您的网站/网络应用程序将无法使用JavaScript!在网站的非公开部分可以使用,就像已知用户组使用的webapp一样,但是您不应该依赖于网站公共部分的客户端脚本。
另一个简化方法是使用PHP框架,因此您可以更轻松地编写服务器端前端。这基本上可以让你给一个按钮一个服务器端功能,只需调用你的登录方法,并通过设置重定向或替换一些面板或你想在登录后继续使用的任何内容来采取相应行动。
当然你可以自己做所有这些,但这通常会导致很多乱码或者你自己的框架的实现。如果你想自己做,首先将表单发布到相同的PHP文件而不是额外的login.php,并添加一个隐藏的字段,如:
<input type="hidden" name="action" value="login"></input>
在PHP中,检查$_POST['action']=='login'
并调用登录方法。
修改:虽然您的网站可以使用PHP会话或Cookie,但您可能希望使用自己的会话令牌跟踪登录状态,您可以将其传递到桌面应用,以便可以使用连续调用API,因此您不需要处理cookie。这些令牌也应该与IP和客户的其他“个人”信息绑定;理想情况下,该信息应该被加密到令牌或加密的令牌中(客户端不必“解密”它,只需返回它进行身份验证)。令牌也应该在不活动后超时。
此外,在阅读了您的旧问题后,我担心您可能会尝试做一些糟糕的事情,例如通过网络发送哈希值,然后只需检查那个哈希值与您的用户表,因为讨论了JS端编码那里。如果你想在客户端实现一些加密算法,要么确保它是安全的(除非你进入加密,否则很难做到这一点)或者使用SSL。
答案 2 :(得分:0)
我会变得非常“精力充沛”,然后走出一条巨大的肢体,并说这就是你要做的事情:
<?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
}
这样你只需要一个login.php文件。