Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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
Javascript 会话_start()PHP反应JS AXIOS出现问题_Javascript_Php_Reactjs_Session_Axios - Fatal编程技术网

Javascript 会话_start()PHP反应JS AXIOS出现问题

Javascript 会话_start()PHP反应JS AXIOS出现问题,javascript,php,reactjs,session,axios,Javascript,Php,Reactjs,Session,Axios,在web应用程序的“我的登录”页面中,当用户正确输入电子邮件和密码时,任何会话都将打开。在console>应用程序中,我没有PHPSESSID。然而,当我使用带有简单HTML代码的PHP文件时,它工作正常,并且我有一个PHPSESSID。我不明白有什么问题,如果有人能帮我的话 ReactJS文件: import React from 'react'; import { Redirect} from 'react-router'; import './connexion.css'; import

在web应用程序的“我的登录”页面中,当用户正确输入电子邮件和密码时,任何会话都将打开。在console>应用程序中,我没有PHPSESSID。然而,当我使用带有简单HTML代码的PHP文件时,它工作正常,并且我有一个PHPSESSID。我不明白有什么问题,如果有人能帮我的话

ReactJS文件:

import React from 'react';
import { Redirect} from 'react-router';
import './connexion.css';
import axios from 'axios';

class Login extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      password: null,
      email: null,
      loggedIn: false, 
      error: '',

    };
  }

  change = async e => {
    await this.setState({
      [e.target.id]: e.target.value,
    });
  }

  handleSubmitLogIn = e => {
    const { email, password } = this.state;

    if (password && email) {

      console.log(this.state);
      let formData = new FormData();
      formData.append("email",this.state.email);
      formData.append("password",this.state.password);
      const url = "http://localhost:8888/API/Connexion/login.php";
      axios.post(url, formData)

      .then(function(response) {  
        this.setState({loggedIn: true});
        console.log("success");
      }.bind(this))

      .catch((error) => {
        if(error.response && error.response.status === 403){
          this.setState({
            error: error.response.data,
            });
        }
      });

    } else {
      this.setState({
        error: 'please fill in everything',
      });
    }

    setTimeout(() => {
      this.setState({
        error: '',
      });
    }, 2000);

    e.preventDefault();    
  }


  render() {
    const { error } = this.state;
    const {loggedIn } = this.state;

    if(loggedIn){
      //redirect to the home page
      return <Redirect to="/accueil"/>;
    }

    return (
      <div>
                <form onSubmit={this.handleSubmitLogIn}>
                  <div className="text-center">
                    <h2 className="dark-grey-text mb-5">
                      Log In
                    </h2>
                  </div>
                  <label htmlFor="email" className="grey-text">
                    email
                    <input
                      type="email"
                      id="email"
                      name="email"
                      className="form-control"
                      onChange={this.change}
                    />
                  </label>

                  <br />
                  <label htmlFor="password" className="grey-text">
                    password
                    <input
                      type="password"
                      id="password"
                      name="password"
                      className="form-control"
                      onChange={this.change}
                    />
                  </label>

                  <div className="text-center mb-3">
                    <button type="submit" className="btn btn-primary" onClick={this.handleSubmitLogIn}>validate</button>
                    {
                     error && (
                     <p className="error">{error}</p>
                     )
                    }
                  </div>
                </form>
      </div>
    );
  }
}

export default Login;
从“React”导入React;
从“react router”导入{Redirect};
导入“/connexion.css”;
从“axios”导入axios;
类登录扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
密码:null,
电子邮件:空,
洛格丁:错,
错误:“”,
};
}
更改=异步e=>{
等待这一天({
[e.target.id]:e.target.value,
});
}
handleSubmitLogIn=e=>{
const{email,password}=this.state;
如果(密码和电子邮件){
console.log(this.state);
设formData=new formData();
formData.append(“email”,this.state.email);
formData.append(“密码”,this.state.password);
常量url=”http://localhost:8888/API/Connexion/login.php";
post(url、formData)
.then(函数(响应){
this.setState({loggedIn:true});
控制台日志(“成功”);
}.绑定(本)
.catch((错误)=>{
if(error.response&&error.response.status==403){
这是我的国家({
错误:error.response.data,
});
}
});
}否则{
这是我的国家({
错误:“请填写所有内容”,
});
}
设置超时(()=>{
这是我的国家({
错误:“”,
});
}, 2000);
e、 预防默认值();
}
render(){
const{error}=this.state;
const{loggedIn}=this.state;
if(loggedIn){
//重定向到主页
返回;
}
返回(
登录
电子邮件

密码 验证 { 错误&&(

{error}

) } ); } } 导出默认登录;
PHP文件login.PHP:

<?php
    session_start();        

    $con=mysqli_connect('localhost', 'root', 'root', 'mybibli');

    if(!$con) {                                                 
        die('erreur de connexion avec la base de donnée'.mysql_error());    
    }

        $email = $_POST['email'];
        $password = $_POST['password'];

        $email = strip_tags(mysqli_real_escape_string($con, trim($email)));
        $password = strip_tags(mysqli_real_escape_string($con, trim($password)));       

        $query = "SELECT * FROM user where email='".$email."'"; 
        $hi = mysqli_query($con, $query);
        if(mysqli_num_rows($hi) > 0) {

            $row = mysqli_fetch_array($hi);
            $password_hash = $row['password'];

            if(password_verify($password, $password_hash)) {
                $_SESSION['User']=$_POST['email'];      
                http_response_code(200);            
            } else {
                echo"invalid password";
                http_response_code(403);            
            }
        } else{
            echo"No user account linked to this email address";
            http_response_code(403);            
        }
?>


仔细阅读此处的建议。我不想重复这一点,但您必须将
with credentials:true
添加到您的axios请求中,并且必须将头添加到响应
访问控制允许来源:http://localhost:8888
在您的情况下。这就是你所需要的。

你检查过了吗-?我还是做不到。我建议:(1)编辑你的问题,在顶部陈述问题,更具体一点-问题到底是什么。(2) 只发布与您的问题直接相关的具体细节(例如,与会话创建相关的任何内容),而不是整个代码,以帮助阅读本文的人关注问题并能够给您答案。我将此添加到我的请求中:
axios.post(url,FormData,{withCredentials:true,标题:'访问控制允许来源:http://localhost:8888“})
但我仍然没有成功,我应该更改其他内容吗?axios.post(url,FormData,{withCredentials:true})-这是针对axios的,标题('Access-Control-Allow-Origin:);应该添加到php脚本的第一行中-login.phpI添加了控制台结果,即使我更改了它,如果您可以看到,请添加标题到php脚本中吗?如果是,请尝试使用
http://localhost:3003
域应与运行应用程序请求的域相同。请尝试使用
with credentials:false