Constant decrease health value during collision c#

I’m trying to create a script which would decrease the health value constantly during collision with object Flare and stop the decrease immediately when the collision is over. I would like to have it with a constant speed(around 5-10 health per second, even better if it is adjustable with a public value(in my script that would be ‘lowerlife’)) and make it visible also on a GuiText counter. I managed to do something which is almost working but for some reason health continues to decrease even after the collision is over. I made health and lifelower public, so I can play with them easily. Here is my current code below:

public GUIText healthText;
public int health;
public float lifelower;

void Start () {
health = 100;
SetCountText ();
lifelower=0.2;

}

void OnTriggerEnter(Collider other){
if (other.gameObject.tag == "Flare") {
StartCoroutine("LowerHealth");
SetCountText();
}
}

void OnTriggerExit(Collider other){
if (other.gameObject.tag == "Flare") {
StopCoroutine ("LowerHealth");
SetCountText ();
}
}

IEnumerator LowerHealth() {
while (true) {
yield return new WaitForSeconds (lifelower);
health --;
SetCountText();
}
}

void SetCountText(){
healthText.text = "Health: " + health.ToString ();
if (health < 1)
gameoverText.text = "GAME OVER";
}

I would be very happy if someone could solve me why does the health value decrease continues after end of collision.

You’re already using triggers; why not use

void OnTriggerStay() {}

and put all your health-decreasing logic within it?

edit: I see that you want to lose health only at certain intervals of time. I think if I were you, I’d just keep a timer variable:

private float timer = 0;
void OnTriggerStay() {
  // if it's the right object...
  timer += Time.deltaTime;
  if (timer > lifelower) {
    // diminish health & reset timer to zero
  }
}