我正在使用PHP,MySQL(PDO),JQuery和HTML(CSS)在社交网站上工作。我现在在个人资料页面上工作,我想确定用户是在他们自己的页面还是其他人,以确定他们将拥有什么输入。我想为个人资料页面保留一个框架并加载相应的选项,而不是有两个不同的页面(我的个人资料与其他个人资料)。
我正在学习JQuery和PHP,所以现在我想,在JQuery中,我可以获得$ _GET(?username =)并将其与用户ID进行比较。登录,然后根据它加载我需要的组件。
或者我在PHP中确定用户然后运行某个脚本来加载组件。
这些方式会起作用,还是有不同的/更好的方法来做到这一点?
答案 0 :(得分:1)
我认为您不能在JavaScript中使用$_GET
。
相反,有一个URLSearchParams
const url = new URL('http://domain/path?username=someone');
const username = new URLSearchParams(url.search).get('username)'; // someone
答案 1 :(得分:0)
在jquery中,你可以使用数据类型为html的$ .get()
答案 2 :(得分:0)
您可以在JavaScript中回显PHP的GET值。但请确保在没有makeItSafe
(您必须自己定义)的情况下,可以利用此代码执行跨站点脚本攻击:
<script>
var myGlobalUserID = "<?php echo makeItSafe($_GET['userID']); ?>";
</script>
答案 3 :(得分:0)
最好的安全措施是不要依赖浏览器中发生的任何事情。
这意味着你应该总是在服务器上找出权限(在PHP端)。
假设您已对用户进行了身份验证,并在PHP中将用户设为$currentUser
,其ID为$currentUser->id
。
现在,此用户想要通过请求网址“个人资料?id = 555”
来查看某个资料所以这里(基本上)你在PHP方面做了什么:
$requestedProfile = (int)$_GET['profile'];
if ($requestedProfile == $currentUser->id) {
// they want own profile
show_controls_for_own_profile();
} else {
// they want someone else's profile
show_controls_for_other_profile();
}
在这种情况下,jQuery在这里无关。
此外,我们假设您要缓存整个配置文件页面以快速将其加载到浏览器中,并且仅在此之后,ajax加载与用户权限相关联的其他控件。
然后你有两个控制器方法(php脚本,无论如何),每个都为它自己提供服务:
public function showProfile() {
$requestedProfile = (int)$_GET['profile'];
if (profile_exists($requestedProfile)) {
show_the_profile($requestedProfile); // no check here
}
}
上面的方法将返回通用配置文件页面的ID(带有空的“.controls”元素),在该页面上,一些 jquery 代码会要求服务器返回适当的用户变体 - 依赖部分。
$.ajax('/user-controls.php')
.done(function(response) { $('.controls').html(response); });
请注意,它不告诉服务器任何用户ID - 服务器应该已经知道会话中当前经过身份验证的用户ID!
第二个函数与开头一样,只返回控件的HTML:
// Example of getting current profile from server's headers
function get_viewed_profile_id()
{
// url of previous profile page, e.g. http://example.com/profile?id=555
$referer = $_SERVER['HTTP_REFERER'];
$query = parse_url($referer, PHP_URL_QUERY); // id=555
parse_str($query, $params); // ['id' => '555']
return $params['id']; // 555
}
// we should store the authenticated user in session,
// not rely on anything user sends from their browser
$currentUserId = $_SESSION['user']->id;
$requestedProfileId = get_viewed_profile_id();
// now that we know both viewed profile and current user,
// we can compare them
if ($requestedProfileId == $currentUserId) {
// they want own profile
show_controls_for_own_profile();
} else {
// they want someone else's profile
show_controls_for_other_profile();
}
与上面相同,但您不依赖$_SERVER['HTTP_REFERER']
,而是将一些逻辑转移到Javascript:
浏览器问:
// look up currently browsed profile from current window url
var q = new URLSearchParams(window.location.search);
var controlsURL = '/user-controls.php?viewedProfile=' + q.get('id');
// ask for controls, specifying the currently browsed profile
$.ajax(controlsURL)
.done(function(response) { $('.controls').html(response); });
服务器响应:
function get_viewed_profile_id()
{
return (int)$_GET['viewedProfile'];
}
// we should store the authenticated user in session,
// not rely on anyhting user sends from their browser
$currentUserId = $_SESSION['user']->id;
$requestedProfileId = get_viewed_profile_id();
// now that we know both viewed profile and current user,
// we can compare them
if ($requestedProfileId == $currentUserId) {
// they want own profile
show_controls_for_own_profile();
} else {
// they want someone else's profile
show_controls_for_other_profile();
}
答案 4 :(得分:0)
只需在页面上声明一个隐藏字段
<input type="hidden" id="username" value="<?php echo $_GET['username'];?>">
获取用户名值。 然后只需在jquery中获取该值
<script>
$(document).ready(function(){
var username = $("#username").val();
if(username == "abc"){
$("#div_one").show();
$("#div_two").hide();
}
});
</script>
使用您要向用户展示的if()
条件和hide()
,show()
方法加载组件。