Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话在Angular 6项目中不起作用_Php_Angular_Session_Localhost_Angular6 - Fatal编程技术网

PHP会话在Angular 6项目中不起作用

PHP会话在Angular 6项目中不起作用,php,angular,session,localhost,angular6,Php,Angular,Session,Localhost,Angular6,我使用angular 6作为前端,PHP作为后端WAMP,我想建立一个登录系统。当某人输入有效凭证时,我希望他被重定向到 我有auth.php,当有人输入有效的用户名/密码时,它会设置会话变量,然后verify.php检查会话变量是否已设置。 虽然应用程序将我重定向到主页,但verify.php无法查看会话变量 这些是我的档案: login-form.component.ts 它从html中获取用户名和密码并将其发送到服务 auth.service.ts getSomeData在user.ser

我使用angular 6作为前端,PHP作为后端WAMP,我想建立一个登录系统。当某人输入有效凭证时,我希望他被重定向到

我有auth.php,当有人输入有效的用户名/密码时,它会设置会话变量,然后verify.php检查会话变量是否已设置。 虽然应用程序将我重定向到主页,但verify.php无法查看会话变量

这些是我的档案:

login-form.component.ts

它从html中获取用户名和密码并将其发送到服务

auth.service.ts

getSomeData在user.service.ts中实现

有没有办法解决会话中的此问题,或者我必须使用另一种方法签入会话


谢谢。

您不能在一个域上设置会话而在另一个域上使用,从您的代码可以清楚地看出您使用的是两个不同的端口,如果您想使用会话,javascript和PHP必须在同一个域/端口上

如果您想使用不同的域/端口,则必须找到其他方法,如基于令牌的身份验证,即在auth.php中成功登录后创建一个令牌,该令牌将保存在数据库中,并在成功响应中发回该令牌

在您的应用程序中,将该令牌保存到存储器或任何您喜欢的位置,并使用该令牌从PHP API检索使用数据

因此,当您在user.service.ts中进行调用时,您的URL应该包含令牌

YOUR_TOKEN = '1234'//received after successfull login and saved in local storage
return this.http.get<myData>('http://localhost/angular6-app/api/verify.php?token='+YOUR_TOKEN);

p、 注销时,请确保过期或从angulare存储和数据库中删除令牌。

您不能在一个域上设置会话并在另一个域上使用,从您的代码可以清楚地看出,您使用的是两个不同的端口,如果要使用会话,javascript和PHP必须在同一域/端口上

如果您想使用不同的域/端口,则必须找到其他方法,如基于令牌的身份验证,即在auth.php中成功登录后创建一个令牌,该令牌将保存在数据库中,并在成功响应中发回该令牌

在您的应用程序中,将该令牌保存到存储器或任何您喜欢的位置,并使用该令牌从PHP API检索使用数据

因此,当您在user.service.ts中进行调用时,您的URL应该包含令牌

YOUR_TOKEN = '1234'//received after successfull login and saved in local storage
return this.http.get<myData>('http://localhost/angular6-app/api/verify.php?token='+YOUR_TOKEN);

p、 s注销时,请确保过期或从angulare存储和数据库中删除令牌。

一旦构建ngApp并使其生效,您将获得会话值,并将应用程序和API保留在同一目录中,您可以使用上述相同方法。因为您将使用相同的端口/域访问API。

一旦构建ngApp并使其生效并将应用程序和API保持在同一目录中,您将获得会话值,您可以使用上述相同的方法。因为您将使用相同的端口/域访问API。

谢谢您的建议!通过将令牌保存到存储器,您指的是本地存储器或会话存储器?您可以使用angulare中的本地或会话存储器,这取决于您的需要,也可以存储用户的完整会话,而不是创建令牌,这只是给您一个想法。现在一切都取决于你如何使用用户数据谢谢你的建议!通过将令牌保存到存储器,您指的是本地存储器或会话存储器?您可以使用angulare中的本地或会话存储器,这取决于您的需要,也可以存储用户的完整会话,而不是创建令牌,这只是给您一个想法。现在,这完全取决于您如何使用用户数据
include 'config.php'; 
header('Access-Control-Allow-Origin: http://localhost:4200'); 

$postdata = file_get_contents("php://input");
if(isset($postdata) && !empty($postdata)) {

    $request = json_decode($postdata);
    $username = $request->username;
    $password = $request->password;
    $sql = "select * from user where username = '$username'";
    $result = $conn->query($sql);              
    $row = $result->fetch_assoc();

    if($row['username'] == $username && password_verify($password, $row['password'])) //kanei verify me to hash pou exei ginei
        {
            $_SESSION['username'] = $username;  
            $_SESSION['loggedin'] = true;
            ?>
            {
                "success": true,
                "message": "You have logged in"
            }
            <?php
        }
    else {
        ?>
        {
            "success": false,
            "message": "Invalid credentials"
        }
        <?php
        }
}

?>
<?php
session_start();
header('Access-Control-Allow-Origin: http://localhost:4200');

if (isset($_SESSION['loggedin'])) {
    ?>
    {
        "success": true,
        "message": "You have the right."

    } 
    <?php
}
else {
    ?>
    {
        "success": false,
        "message": "You DONT have the right."
    }
    <?php
}

?>
export class HomeComponent implements OnInit {

  message = "Loading..."

  constructor(private user: UserService) { }

  ngOnInit() {
    this.user.getSomeData().subscribe(data => {
      this.message = data.message;
    })
  }
getSomeData() {
    return this.http.get<myData>('http://localhost/angular6-app/api/verify.php');
  }
YOUR_TOKEN = '1234'//received after successfull login and saved in local storage
return this.http.get<myData>('http://localhost/angular6-app/api/verify.php?token='+YOUR_TOKEN);
$token = $_GET['token'];
// check if token is valid in your database and send response