Ethernet Shield Stops After a while

I use Ethernet shield (W5100) and RC522 on my Arduino Uno. It works 1 or 2 hours (sometimes 15 minutes - sometimes 2 days) After this random time, it stops working. I mean stop with, RC-522 module don't read cards, and ethernet shield can't connect server. When i unplug power (1.5A - 12 V power suply) and re-plug it, it starts working successfully.

I need to this system works forever... This system reads mifare card, and sends to the server, after that it checks reply, and if the reply is "1", it triggers relay. (relay is 5V simple relay)

Some people said "Change your adaptor", and i changed it, nothing changed. Some people said " use 10 microfarad capasitor between rst and gnd pin" and nothing changed. and some people said, "this is arduino dude, it is for just studend give up and use stm32", and i didn't apply this suggestion yet. I want to know why this happens.

    #include <SPI.h>
    #include <Ethernet.h>
    #include <MFRC522.h>
               
    //Mac address of ethernet shield
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEA }; 

    //My Network info, i use static ip
    byte ip[] = { 172, 16, 64, 78 }; 
    byte gateway[] = { 172, 16, 64, 1 }; 
    byte myserver[] = { 172, 16, 64, 46 }; 
    byte subnet[] = { 255, 255, 255, 0 }; 

    String CardInfo = "";
    EthernetClient client;
    String GateNo = "0";
    String DeviceNo = "100";

    String Answer = "";


    MFRC522 mfrc522;
    byte Key[] = { 0xff,0xff,0xff,0xff,0xff,0xff };
    MFRC522::MIFARE_Key key;


    void setup(){
      //Disabling SD Card
      pinMode(4,OUTPUT);
      digitalWrite(4,HIGH);

      Ethernet.begin(mac, ip, subnet, gateway);

      KeyCreate();
      
      mfrc522.PCD_Init(2, 8); 
      mfrc522.PCD_DumpVersionToSerial();

    }



    void sendGET()
    {
      //I used this line to guarantee the disconnect from server
      client.stop();
      Answer = "";
      if (client.connect(myserver, 81)) {  
        client.println("GET /AccessCheck/CardNo=" + CardInfo + "&GateNo=" + GateNo + "&DeviceNo=" + DeviceNo + " HTTP/1.0");
        client.println("Authorization: Basic xxxxxxxxxxxx");
        client.println(); 
      } 
      else {
        //Ethernet.begin(mac, ip, subnet, gateway);
        return;
      }

      int connectLoop = 0;
      while(client.connected())
      {
        while(client.available())
        {
          char c = client.read();
          Answer = Answer + c;
          connectLoop = 0;
        }

        delay(1);
        connectLoop++;
        if(connectLoop > 5000)
        {
          client.stop();
          return;
        }
      }
      client.stop();
    }

    //This function disables eth and enable rc522 (and reverse)
    void Switch(int i)
    {
      switch (i)
      {
        case 0:
          digitalWrite(10, HIGH);
          digitalWrite(2, LOW);
          break;
        case 1:
          digitalWrite(2, HIGH);
          digitalWrite(10, LOW);
          break;
      }
    }

    void AccessControl()
    {
      int AnswerLength = Answer.length();

      pinMode(5, OUTPUT);
      digitalWrite(5, HIGH);
     
      if(Answer[AnswerLength-1] == 49)
      {
        digitalWrite(5, LOW);
        delay(100);
        digitalWrite(5, HIGH);
      }
      pinMode(5, INPUT);
      pinMode(6, INPUT);
      delay(1000);
    }

    void ReadCard()
    {
      byte len = 18;
      MFRC522::StatusCode status;

      byte MyBuffer[18];
      status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 10, &key, &(mfrc522.uid));
      status = mfrc522.MIFARE_Read(10, MyBuffer, &len);
      int counter = 0;
      //This line is check for turkish character
      if(MyBuffer[0] == 221)
      {
        CardInfo = "X";
        for (int i = 1; i < 16; i++)
        {
          if (MyBuffer[i] != 32)
          {
            CardInfo = CardInfo + (char)MyBuffer[i];
          }
        }
      }
      else
      {
        CardInfo = "";
        for (int i = 0; i < 16; i++)
        {
          if (MyBuffer[i] != 32)
          {
            CardInfo = CardInfo + (char)MyBuffer[i];
          }
        }
      }
      
      mfrc522.PICC_HaltA();
      mfrc522.PCD_StopCrypto1();
      return;
    }

    void KeyCreate()
    {
      for (int i = 0; i < 6; i++)
      {
        key.keyByte[i] = Key[i];
      }
    }

    void loop(){
      Switch(0);
      if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
            ReadCard(); 
            Switch(1);
            sendGET();
            AccessControl();
      }
    }

I expect it runs without freezing

Actual result is ethernet shield freezes after a while

You have posted the same question here. Posting the same question in multiple topics is called cross posting. Cross posting is discouraged because it wastes members time when different members give the same answers in multiple locations.

groundFungus:
You have posted the same question here. Posting the same question in multiple topics is called cross posting. Cross posting is discouraged because it wastes members time when different members give the same answers in multiple locations.

not same question, my shield is w5100, that post is about ethernet shield 2 which is W5500 and still there is no answers

Different shields, the same problem and likely the same reason.

Most likely the 12volt supply. This is waaay too high.

The 7volt drop, with the >150mA draw of the ethernet shield alone will already overheat the 5volt regulator.

Try with a 7.5 to 9volt regulated supply on the DC socket,
or, better, with a 5volt cellphone charger connected to the USB socket.
Leo..