我正在为一家作家管理公司建立一个网站。他们每天都会从潜在的,经常是未经请求的作家那里获得大量的剧本提交。新网站将允许潜在的作者提交他或她的想法的简短日志/样本。此想法将发送到管理组的电子邮件帐户。如果管理组喜欢他们看到的内容,他们希望能够从电子邮件中批准该提交,并将一个唯一的链接分派给提交者以上传他们的完整脚本。此链接要么只运行一次,要么只运行一段时间,以便只有预期的收件人可以使用它。
那么,任何人都能指出我可以实现这一目标的某种方式(我是错误的PHP + mySQL)CMS或框架吗?我搜索了很多,但我似乎无法找出将此查询用于搜索引擎的正确方法。
我有一定的编程经验,但在一些简单的Wordpress黑客之外没有太多的PHP。
谢谢!
答案 0 :(得分:1)
我将为您提供构建此类系统的简单方法的一般指导。
我认为Writer以某种方式注册到系统中,并且他/她的个人资料包含有效的邮件地址。
因此,当他提交样本时,您将在“Sample”表上创建一个条目。然后,您将使用示例和链接向Manager发送邮件。此链接将指向一个脚本,将示例的数据库“id”作为参数(此脚本应验证管理器是否已登录 - 如果不是,则显示登录屏幕,并在成功登录后将其重定向回来)。
然后,该脚本将知道管理员允许Writer提交其作品的意图。现在好玩的开始了。
有很多可能性:
您可以在相应的“SubmitAuthorizations”数据库表中创建一个条目,其中包含Writer的ID和授予此授权的日期(即行添加到数据库的日期)。然后,您只需使用“upload.php?id = 42”之类的链接向Writer发送邮件,其中id是授权ID。此脚本将检查记录的用户是否是正确的Writer,以及他是否在允许的时间范围内(通过比较存储的“授权日期”和当前日期)。
接下来就是我喜欢的那个:没有一个特殊的表只是为了处理一些微不足道的事情(假设你永远不想“编辑”一个授权,也没有“取消”它,但它可能仍然“过期” )。您只需向Writer提供一个包含2个参数的链接:授权日期和授权密钥,例如:“upload.php?authDate = 20091030& key = 87a62d726ef7 ...“
让我解释它是如何运作的。
该脚本将首先验证Writer是否已登录(如果没有,请在成功登录后显示带有重定向的登录页面。)
所以,现在是时候验证请求了:也就是说,检查这是不是“伪造”链接。这该怎么做?这只是构建此授权密钥的“智能”方式。
您可以执行以下操作:
key = hash(concat(userId, ";", authDate, ";", seed));
好吧,这里 hash()就是我们所谓的“单向函数”,比如MD5,SHA1等。然后 concat()只是一个字符串连接功能。最后种子就像一个“主密码”,完全随机,不会改变(如果你改变它所有发布的链接都会停止工作)只是为了增加安全性 - 让我们说黑客正确猜测你正在使用MD5(这很容易),他试图通过散列用户名和日期的某些组合来破解你的系统。
此外,对于有效的请求,它必须在正确的时间范围内。
因此,如果密钥都有效,并且日期在时间范围内,则您可以接受上传。
需要注意的一些要点:
我最近在我工作的公司上实施了两次这样的事情,两种完全不同的用途。一旦你明白了,实现起来就非常简单极其 - 整个密钥生成和验证过程可能少于10行代码。
在其中一个上,与你的作家相当的代理人没有进入系统的帐户(实际上这将是他与系统的第一次接触) - 系统中只有他的“个人资料”,由其他人管理。在这种情况下,您必须在“上传”脚本的参数中包含“Writer”的id。
我希望这会有所帮助,而且很明显。如果我找到时间,我会用一些语言的实例来博客。