Player didnt take damage from the Spikes

Im working on a platformer game, I created the UI for the Health and then I created the Player health.But when I created the Sprike script, it didnt work.Like,when I interect with the spike(with Box colider, is trigger) it resets the level.

I also created a void Dead, resets the level if curHealth <= 0,but I dont know why it restarts my lvl if i have 2 lives left(the player have 3 lives public int maxHealth = 3;)

The scripts are:

Spike script :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spikes : MonoBehaviour
{

    private Player player;

    void Start(){

        player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
    }

    void OnTriggerEnter2D(Collider2D col){

        if(col.CompareTag("Player")) {

            player.Damage(1);
        }
    }
}

Player script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Player : MonoBehaviour
{

    public GameObject blood;

    public float speed;
    public float jumpForce;
    private float moveInput;

    private Rigidbody2D rb;


    private bool isGrounded;
    public Transform groundCheck;
    public float checkRadius;
    public LayerMask whatIsGround;

    private int extraJumps;
    public int extraJumpsValue;

    private bool facingRight =  true;

    public int curHealth;
    public int maxHealth = 3;

    void Start(){

        curHealth = maxHealth;

        extraJumps = extraJumpsValue; 
        rb = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate(){

        isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);

        moveInput = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);

        if(facingRight == false && moveInput > 0){
            Flip();
        } else if(facingRight == true && moveInput < 0){
            Flip();
        }
    }

    void Update(){

        if(isGrounded == true){
            extraJumps = extraJumpsValue;
        }

        if(Input.GetKeyDown(KeyCode.UpArrow) && extraJumps > 0){
            rb.velocity = Vector2.up * jumpForce;
            extraJumps--;
        } else if(Input.GetKeyDown(KeyCode.UpArrow) && extraJumps == 0 && isGrounded == true){
            rb.velocity = Vector2.up * jumpForce;
        }

        if(curHealth > maxHealth){
            curHealth = maxHealth;
        }

        if(curHealth <= 0){
            Die ();
        }
    }

    void Flip(){

        facingRight = !facingRight;
        Vector3 Scaler = transform.localScale;
        Scaler.x *= -1;
        transform.localScale = Scaler;
    }

    void Die(){

        //Restart
        Application.LoadLevel(Application.loadedLevel);
    }

    void OnCollisonEnter2D(Collision2D col){
        if (col.gameObject.tag.Equals("Spikes")){

            Instantiate ( blood, transform.position, Quaternion.identity);
            gameObject.SetActive(false);
        }
    }

    public void Damage(int dmg) {

        curHealth -= dmg;
    }
}

How many colliders do you have on player game object or child of player game object? If there are more than one of them then each collision with each collider will run player.Damage(1)