确保仅对经过身份验证的用户接受某些ajax调用某些页面的最佳做法是什么?
例如:
假设我有一个名为blog.php的主页(我知道,创意很丰富).我们还说有一个名为delete.php的页面,它查找参数post_id,然后从数据库中删除一些条目.
在这个非常人为的例子中,blog.php上有一些机制,它通过ajax向delete.php发送一个删除条目的请求.
现在,这种机制只适用于blog.php上经过身份验证的用户.但是什么阻止某人用一堆随机数调用delete.php并删除网站中的所有内容?
我做了一个快速测试,我在blog.php中设置了一个会话变量,然后对delete.php进行了ajax调用,如果会话变量设置与否则返回(不是).
处理这类事情的可接受方式是什么?
好.我第一次尝试这个时一定很疯狂.
我刚刚做了另一个测试,就像上面描述的那样,它完美无缺.
我将尝试使用这个问题的格式,我非常愿意接受有关更好的方法来处理它的建议.
我不想只是在问题中转储一堆代码,所以我已经发布了该类的代码refactormycode.
我的想法是人们可以在这里发布代码片段或进行更改refactormycode并将链接发布回他们的重构.基于此,我会做出投票并接受答案(假设有一个明确的"赢家").
无论如何,对班级本身:
我看到很多关于getter/setter类方法的争论,最好是直接访问简单的属性变量,还是每个类都定义了明确的get/set方法,等等等等等等.我喜欢使用显式方法的想法,以防您以后需要添加更多逻辑.然后,您不必修改使用该类的任何代码.但是我讨厌有一百万个看起来像这样的函数:
public function getFirstName()
{
return $this->firstName;
}
public function setFirstName($firstName)
{
return $this->firstName;
}
Run Code Online (Sandbox Code Playgroud)
现在我确定我不是第一个这样做的人(我希望有一个更好的方法可以让别人向我建议).
基本上,PropertyHandler类有一个__call魔术方法.通过__call以"get"或"set"开头的任何方法然后被路由到将值设置或检索到关联数组的函数.获取或设置后,数组中的键是调用方法的名称.因此,如果进入__call的方法是"getFirstName",则数组键是"FirstName".
我喜欢使用__call,因为它会自动处理子类已经定义了"getFirstName"方法的情况.我的印象(我可能错了)是__get和__set魔术方法不这样做.
所以这是一个如何工作的例子:
class PropTest extends PropertyHandler
{
public function __construct()
{
parent::__construct();
}
}
$props = new PropTest();
$props->setFirstName("Mark");
echo $props->getFirstName();
Run Code Online (Sandbox Code Playgroud)
请注意,PropTest实际上没有"setFirstName"或"getFirstName"方法,PropertyHandler也没有.所有这一切都是在操纵数组值.
另一种情况是你的子类已经扩展了其他东西.由于PHP中不能具有真正的多重继承,因此可以使子类具有PropertyHandler实例作为私有变量.您必须再添加一个函数,但事情的行为方式完全相同.
class PropTest2
{
private $props;
public function __construct()
{
$this->props = new PropertyHandler();
}
public function __call($method, $arguments)
{
return $this->props->__call($method, $arguments);
}
}
$props2 = new PropTest2();
$props2->setFirstName('Mark');
echo $props2->getFirstName(); …Run Code Online (Sandbox Code Playgroud) 我已经在有组织的收件箱和收件箱之间来回走动,我收到的绝对是我所收到的一切.
您是否建议将所有内容保留在收件箱中或进行整理?如果你组织它,是否有任何方法可以让你疯狂或可能是一个Outlook(2003)插件来帮助完成这项任务?
对于它的价值,我觉得我的收件箱中的所有内容都更有效率,按日期分组.我觉得花费更多时间以任何其他方式进行收件箱管理.
是否有所有程序员都应该了解的开源库?我在想一些通用的,一种对标准的扩展,java.util它包含对各种应用程序都有用的基本函数.
我偶尔会遇到通过PHP文件包含一些Javascript的页面:
<html>
<head>
<script type="text/javascript" src="fake_js.php"></script>
</head>
<body onload="handleLoad();">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
其中fake_js.php的内容可能如下所示:
<?php header('Content-type: text/javascript') ?>
function handleLoad() {
alert('I loaded');
}
Run Code Online (Sandbox Code Playgroud)
包含这样的Javascript有什么优点(或缺点)?
我想在我的PHP脚本中使用GD库从外部服务器生成一个随机大图片的小缩略图.每次调用页面时,GD库都会重新生成缩略图并显示它.
这会降低服务器速度还是耗尽不寻常的内存量?
可能重复:
asp.net的.aspx页面中各种符号的含义
我熟悉它<%= "whatever" %>作为一种捷径<% Response.Write("whatever"); %>.
但我最近遇到了一些使用的代码<%# %>.在这个特定的代码库中,它只在一个内部使用<asp:Repeater />但是我
做<%# %>什么以及何时可以/应该使用它?
当浏览器窗口小到足以强制水平滚动条并向右滚动时,标题的背景颜色在浏览器边缘之前结束.我正在使用CSS课程.
.s_header {
margin: 0;
width: 100%;
display: block;
border-bottom: 1px solid #000;
background-color:#b8dbec;
height:133px;
}
Run Code Online (Sandbox Code Playgroud)
内容<div class="s_header">不如下面的4列表那样宽,其中内容总计为840px,图像宽度为+ padding,140px为固定宽度列.因此,当浏览器窗口小于840px时,会有一个水平滚动条,除了滚动时标题的背景被切断之外.
<div class="s_header">body和html 的父元素,100%宽度表示窗口宽度.我试过包括溢出:在.s_header课堂上看得见但没有成功.
体宽也设置为100%边距0
当滚动条出现时,是否有一种简单的方法可以让背景在右侧延伸?
问题页面就在这里
任何建议将不胜感激.
这是一个非常简单的例子,我在R.layout.main中定义了一个ScrollView.然后我尝试动态添加TextView.
不幸的是这崩溃了.
ScrollView scroll = (ScrollView) this.findViewById(R.id.scrollView1);
TextView tv1 = new TextView(this);
tv1.setText("This is tv1");
scroll.addView(tv1);
setContentView(R.layout.main);
Run Code Online (Sandbox Code Playgroud)
现在我可以这样做:
ScrollView scroll = new ScrollView(this);
TextView tv1 = new TextView(this);
tv1.setText("This is tv1");
scroll.addView(tv1);
setContentView(scroll);
Run Code Online (Sandbox Code Playgroud)
但我真的希望能够在XML中定义一些基本UI元素,然后动态添加其他元素.
最好的方法是什么?